home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 12 / BBS in a box XII-1.iso / Files / Tele / Internet / NewsWatch.sit / source / ftplow.c < prev    next >
MacBinary  |  1991-04-03  |  15.8 KB  |  [TEXT/MPS ]

open in: MacOS 8.1     |     Win98     |     DOS

view JSON data     |     view as text

This file was processed as: MacBinary (archive/macBinary).

You can browse this item here: ftplow.c

ConfidenceProgramDetectionMatch TypeSupport
66% dexvert Compact Compressed (Unix) (archive/compact) ext Supported
10% dexvert MacBinary (archive/macBinary) fallback Supported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, Wed Apr 3 18:30:13 1991, modified Wed Apr 3 18:30:13 1991, creator 'MPS ', type ASCII, 15003 bytes "ftplow.c" , at 0x3b1b 806 bytes resource default (weak)
99% file data default
74% TrID Macintosh plain text (MacBinary) default
25% TrID MacBinary 2 default (weak)
100% siegfried fmt/1762 MacBinary (II) default
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[MPS ]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 08 66 74 70 6c 6f 77 | 2e 63 00 00 00 00 00 00 |..ftplow|.c......|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 50 53 | 20 00 00 00 00 00 00 00 |.TEXTMPS| .......|
|00000050| 00 00 00 00 00 3a 9b 00 | 00 03 26 a4 20 16 05 a4 |.....:..|..&. ...|
|00000060| 20 16 05 00 00 00 00 00 | 00 00 00 00 00 00 00 00 | .......|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 de 52 00 00 |........|.....R..|
|00000080| 2f 2a 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |/*------|--------|
|00000090| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000000b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 0d 23 0d 23 |--------|----.#.#|
|000000c0| 09 4e 65 77 73 57 61 74 | 63 68 65 72 09 2d 20 4d |.NewsWat|cher.- M|
|000000d0| 61 63 69 6e 74 6f 73 68 | 20 4e 4e 54 50 20 43 6c |acintosh| NNTP Cl|
|000000e0| 69 65 6e 74 20 41 70 70 | 6c 69 63 61 74 69 6f 6e |ient App|lication|
|000000f0| 0d 23 0d 23 09 57 72 69 | 74 74 65 6e 20 62 79 20 |.#.#.Wri|tten by |
|00000100| 53 74 65 76 65 6e 20 46 | 61 6c 6b 65 6e 62 75 72 |Steven F|alkenbur|
|00000110| 67 0d 23 09 a9 31 39 39 | 30 20 41 70 70 6c 65 20 |g.#..199|0 Apple |
|00000120| 43 6f 6d 70 75 74 65 72 | 2c 20 49 6e 63 2e 0d 23 |Computer|, Inc..#|
|00000130| 0d 23 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |.#------|--------|
|00000140| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000150| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000160| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0d 23 0d |--------|-----.#.|
|00000170| 23 09 66 74 70 6c 6f 77 | 2e 63 0d 23 0d 23 09 54 |#.ftplow|.c.#.#.T|
|00000180| 68 69 73 20 66 69 6c 65 | 20 63 6f 6e 74 61 69 6e |his file| contain|
|00000190| 73 20 74 68 65 20 6c 6f | 77 2d 6c 65 76 65 6c 20 |s the lo|w-level |
|000001a0| 69 6d 70 6c 65 6d 65 6e | 74 61 74 69 6f 6e 20 6f |implemen|tation o|
|000001b0| 66 20 74 68 65 0d 23 09 | 66 69 6c 65 20 74 72 61 |f the.#.|file tra|
|000001c0| 6e 73 66 65 72 20 70 72 | 6f 74 6f 63 6f 6c 2e 20 |nsfer pr|otocol. |
|000001d0| 20 54 68 69 73 20 70 72 | 6f 74 6f 63 6f 6c 20 69 | This pr|otocol i|
|000001e0| 73 20 69 6d 70 6c 65 6d | 65 6e 74 65 64 0d 23 09 |s implem|ented.#.|
|000001f0| 75 73 69 6e 67 20 74 68 | 65 20 54 43 50 20 70 72 |using th|e TCP pr|
|00000200| 6f 74 6f 63 6f 6c 2c 20 | 66 72 6f 6d 20 63 61 6c |otocol, |from cal|
|00000210| 6c 73 20 69 6e 20 54 43 | 50 48 69 2e 63 20 61 6e |ls in TC|PHi.c an|
|00000220| 64 0d 23 09 54 43 50 52 | 6f 75 74 69 6e 65 73 2e |d.#.TCPR|outines.|
|00000230| 63 0d 23 0d 23 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |c.#.#---|--------|
|00000240| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000250| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000260| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000270| 2a 2f 0d 0d 23 69 6e 63 | 6c 75 64 65 20 22 63 6f |*/..#inc|lude "co|
|00000280| 6d 70 61 74 2e 68 22 0d | 23 69 6e 63 6c 75 64 65 |mpat.h".|#include|
|00000290| 20 3c 73 74 72 69 6e 67 | 2e 68 3e 0d 23 69 6e 63 | <string|.h>.#inc|
|000002a0| 6c 75 64 65 20 3c 73 74 | 64 69 6f 2e 68 3e 0d 0d |lude <st|dio.h>..|
|000002b0| 23 69 66 64 65 66 20 50 | 52 4f 54 4f 53 0d 23 69 |#ifdef P|ROTOS.#i|
|000002c0| 6e 63 6c 75 64 65 20 3c | 54 79 70 65 73 2e 68 3e |nclude <|Types.h>|
|000002d0| 0d 23 69 6e 63 6c 75 64 | 65 20 3c 4d 65 6d 6f 72 |.#includ|e <Memor|
|000002e0| 79 2e 68 3e 0d 23 69 6e | 63 6c 75 64 65 20 3c 4f |y.h>.#in|clude <O|
|000002f0| 53 55 74 69 6c 73 2e 68 | 3e 0d 23 69 6e 63 6c 75 |SUtils.h|>.#inclu|
|00000300| 64 65 20 3c 50 61 63 6b | 61 67 65 73 2e 68 3e 0d |de <Pack|ages.h>.|
|00000310| 23 69 6e 63 6c 75 64 65 | 20 3c 44 65 73 6b 2e 68 |#include| <Desk.h|
|00000320| 3e 0d 23 69 6e 63 6c 75 | 64 65 20 3c 43 75 72 73 |>.#inclu|de <Curs|
|00000330| 6f 72 43 74 6c 2e 68 3e | 0d 23 69 6e 63 6c 75 64 |orCtl.h>|.#includ|
|00000340| 65 20 3c 53 74 72 69 6e | 67 73 2e 68 3e 0d 23 69 |e <Strin|gs.h>.#i|
|00000350| 6e 63 6c 75 64 65 20 3c | 45 72 72 6f 72 73 2e 68 |nclude <|Errors.h|
|00000360| 3e 0d 23 69 6e 63 6c 75 | 64 65 20 3c 53 74 64 49 |>.#inclu|de <StdI|
|00000370| 4f 2e 68 3e 0d 23 69 6e | 63 6c 75 64 65 20 3c 4c |O.h>.#in|clude <L|
|00000380| 69 73 74 73 2e 68 3e 0d | 23 65 6e 64 69 66 0d 0d |ists.h>.|#endif..|
|00000390| 23 69 6e 63 6c 75 64 65 | 20 22 4d 61 63 54 43 50 |#include| "MacTCP|
|000003a0| 43 6f 6d 6d 6f 6e 54 79 | 70 65 73 2e 68 22 0d 23 |CommonTy|pes.h".#|
|000003b0| 69 6e 63 6c 75 64 65 20 | 22 54 43 50 50 42 2e 68 |include |"TCPPB.h|
|000003c0| 22 0d 23 69 6e 63 6c 75 | 64 65 20 22 54 43 50 48 |".#inclu|de "TCPH|
|000003d0| 69 2e 68 22 0d 23 69 6e | 63 6c 75 64 65 20 22 54 |i.h".#in|clude "T|
|000003e0| 43 50 52 6f 75 74 69 6e | 65 73 2e 68 22 0d 23 69 |CPRoutin|es.h".#i|
|000003f0| 6e 63 6c 75 64 65 20 22 | 6e 6e 74 70 2e 68 22 0d |nclude "|nntp.h".|
|00000400| 23 69 6e 63 6c 75 64 65 | 20 22 46 54 50 4c 6f 77 |#include| "FTPLow|
|00000410| 2e 68 22 0d 23 69 6e 63 | 6c 75 64 65 20 22 6e 65 |.h".#inc|lude "ne|
|00000420| 74 73 74 75 66 66 2e 68 | 22 0d 23 69 6e 63 6c 75 |tstuff.h|".#inclu|
|00000430| 64 65 20 22 6d 69 73 63 | 73 74 75 66 66 2e 68 22 |de "misc|stuff.h"|
|00000440| 0d 0d 2f 2a 20 6c 6f 63 | 61 6c 20 70 72 6f 74 6f |../* loc|al proto|
|00000450| 73 20 2a 2f 0d 0d 4f 53 | 45 72 72 20 53 61 79 48 |s */..OS|Err SayH|
|00000460| 65 6c 6c 6f 28 75 6e 73 | 69 67 6e 65 64 20 6c 6f |ello(uns|igned lo|
|00000470| 6e 67 20 63 6f 6e 6e 49 | 44 29 3b 0d 4f 53 45 72 |ng connI|D);.OSEr|
|00000480| 72 20 55 73 65 72 41 75 | 74 68 28 75 6e 73 69 67 |r UserAu|th(unsig|
|00000490| 6e 65 64 20 6c 6f 6e 67 | 20 63 6f 6e 6e 49 44 2c |ned long| connID,|
|000004a0| 63 68 61 72 20 2a 75 73 | 65 72 49 44 2c 63 68 61 |char *us|erID,cha|
|000004b0| 72 20 2a 70 61 73 73 77 | 6f 72 64 29 3b 0d 4f 53 |r *passw|ord);.OS|
|000004c0| 45 72 72 20 53 65 6e 64 | 43 6f 6d 6d 61 6e 64 28 |Err Send|Command(|
|000004d0| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 20 63 6f |unsigned| long co|
|000004e0| 6e 6e 49 44 2c 63 68 61 | 72 20 2a 63 6f 6d 6d 61 |nnID,cha|r *comma|
|000004f0| 6e 64 2c 50 74 72 20 2a | 72 65 73 70 6f 6e 73 65 |nd,Ptr *|response|
|00000500| 2c 75 6e 73 69 67 6e 65 | 64 20 73 68 6f 72 74 20 |,unsigne|d short |
|00000510| 2a 72 65 73 70 4c 65 6e | 29 3b 0d 4f 53 45 72 72 |*respLen|);.OSErr|
|00000520| 20 4d 61 6b 65 44 61 74 | 61 53 74 72 65 61 6d 28 | MakeDat|aStream(|
|00000530| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 20 2a 64 |unsigned| long *d|
|00000540| 61 74 61 43 6f 6e 6e 49 | 44 2c 74 63 70 5f 70 6f |ataConnI|D,tcp_po|
|00000550| 72 74 20 6c 50 6f 72 74 | 2c 54 43 50 69 6f 70 62 |rt lPort|,TCPiopb|
|00000560| 20 2a 2a 70 42 6c 6f 63 | 6b 29 3b 0d 4f 53 45 72 | **pBloc|k);.OSEr|
|00000570| 72 20 47 65 74 44 69 72 | 65 63 74 44 61 74 61 28 |r GetDir|ectData(|
|00000580| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 20 64 61 |unsigned| long da|
|00000590| 74 61 43 6f 6e 6e 49 44 | 2c 50 74 72 20 2a 64 69 |taConnID|,Ptr *di|
|000005a0| 72 65 63 74 6f 72 79 2c | 54 43 50 69 6f 70 62 20 |rectory,|TCPiopb |
|000005b0| 2a 70 42 6c 6f 63 6b 29 | 3b 0d 4f 53 45 72 72 20 |*pBlock)|;.OSErr |
|000005c0| 53 65 6e 64 46 69 6c 65 | 44 61 74 61 28 75 6e 73 |SendFile|Data(uns|
|000005d0| 69 67 6e 65 64 20 6c 6f | 6e 67 20 64 61 74 61 43 |igned lo|ng dataC|
|000005e0| 6f 6e 6e 49 44 2c 63 68 | 61 72 20 2a 66 69 6c 65 |onnID,ch|ar *file|
|000005f0| 4e 61 6d 65 2c 63 68 61 | 72 20 2a 64 61 74 61 2c |Name,cha|r *data,|
|00000600| 54 72 61 6e 73 54 79 70 | 65 20 74 54 79 70 65 2c |TransTyp|e tType,|
|00000610| 6c 6f 6e 67 20 73 69 7a | 65 2c 54 43 50 69 6f 70 |long siz|e,TCPiop|
|00000620| 62 20 2a 70 42 6c 6f 63 | 6b 29 3b 0d 4f 53 45 72 |b *pBloc|k);.OSEr|
|00000630| 72 20 52 65 6d 6f 76 65 | 44 61 74 61 53 74 72 65 |r Remove|DataStre|
|00000640| 61 6d 28 75 6e 73 69 67 | 6e 65 64 20 6c 6f 6e 67 |am(unsig|ned long|
|00000650| 20 64 61 74 61 43 6f 6e | 6e 49 44 29 3b 0d 4f 53 | dataCon|nID);.OS|
|00000660| 45 72 72 20 53 65 6e 64 | 50 6f 72 74 43 6f 6d 6d |Err Send|PortComm|
|00000670| 28 75 6e 73 69 67 6e 65 | 64 20 6c 6f 6e 67 20 64 |(unsigne|d long d|
|00000680| 61 74 61 43 6f 6e 6e 49 | 44 2c 20 73 68 6f 72 74 |ataConnI|D, short|
|00000690| 20 70 6f 72 74 4e 75 6d | 29 3b 0d 74 63 70 5f 70 | portNum|);.tcp_p|
|000006a0| 6f 72 74 20 47 65 74 50 | 6f 72 74 4e 75 6d 28 76 |ort GetP|ortNum(v|
|000006b0| 6f 69 64 29 3b 0d 4f 53 | 45 72 72 20 46 54 50 54 |oid);.OS|Err FTPT|
|000006c0| 65 78 74 4d 6f 64 65 28 | 75 6e 73 69 67 6e 65 64 |extMode(|unsigned|
|000006d0| 20 6c 6f 6e 67 20 63 6f | 6e 6e 49 44 29 3b 0d 76 | long co|nnID);.v|
|000006e0| 6f 69 64 20 46 69 78 43 | 52 4c 46 28 63 68 61 72 |oid FixC|RLF(char|
|000006f0| 20 2a 64 61 74 61 2c 20 | 6c 6f 6e 67 20 2a 6c 65 | *data, |long *le|
|00000700| 6e 67 74 68 29 3b 0d 76 | 6f 69 64 20 41 64 64 43 |ngth);.v|oid AddC|
|00000710| 52 4c 46 28 63 68 61 72 | 20 2a 2a 64 61 74 61 2c |RLF(char| **data,|
|00000720| 20 6c 6f 6e 67 20 2a 6c | 65 6e 67 74 68 29 3b 0d | long *l|ength);.|
|00000730| 0d 23 64 65 66 69 6e 65 | 09 63 53 6c 65 65 70 54 |.#define|.cSleepT|
|00000740| 69 6d 65 09 09 32 30 4c | 0d 23 64 65 66 69 6e 65 |ime..20L|.#define|
|00000750| 09 63 57 61 69 74 46 6f | 72 4f 70 65 6e 09 31 32 |.cWaitFo|rOpen.12|
|00000760| 30 4c 0d 23 64 65 66 69 | 6e 65 09 63 52 42 75 66 |0L.#defi|ne.cRBuf|
|00000770| 4c 65 6e 09 09 33 32 37 | 36 38 4c 0d 23 64 65 66 |Len..327|68L.#def|
|00000780| 69 6e 65 09 63 44 61 74 | 61 4c 65 6e 09 09 33 32 |ine.cDat|aLen..32|
|00000790| 37 36 38 0d 23 64 65 66 | 69 6e 65 09 63 52 42 75 |768.#def|ine.cRBu|
|000007a0| 66 44 61 74 61 4c 65 6e | 09 36 35 35 33 35 4c 0d |fDataLen|.65535L.|
|000007b0| 23 64 65 66 69 6e 65 09 | 63 58 66 65 72 42 6c 6f |#define.|cXferBlo|
|000007c0| 63 6b 53 69 7a 65 09 33 | 32 37 36 38 0d 23 64 65 |ckSize.3|2768.#de|
|000007d0| 66 69 6e 65 09 63 53 65 | 6e 64 42 6c 6f 63 6b 53 |fine.cSe|ndBlockS|
|000007e0| 69 7a 65 09 31 36 33 38 | 34 0d 23 64 65 66 69 6e |ize.1638|4.#defin|
|000007f0| 65 09 63 43 6f 6e 74 72 | 6f 6c 50 6f 72 74 09 32 |e.cContr|olPort.2|
|00000800| 31 0d 23 64 65 66 69 6e | 65 09 63 49 6e 76 61 6c |1.#defin|e.cInval|
|00000810| 69 64 48 6f 73 74 09 2d | 31 0d 23 64 65 66 69 6e |idHost.-|1.#defin|
|00000820| 65 09 63 43 6f 6e 6e 45 | 72 72 09 09 2d 32 0d 23 |e.cConnE|rr..-2.#|
|00000830| 64 65 66 69 6e 65 09 63 | 41 63 63 65 73 73 45 72 |define.c|AccessEr|
|00000840| 72 09 09 2d 33 0d 23 64 | 65 66 69 6e 65 09 63 4e |r..-3.#d|efine.cN|
|00000850| 6f 74 43 6f 6d 70 45 72 | 72 09 09 2d 34 0d 23 64 |otCompEr|r..-4.#d|
|00000860| 65 66 69 6e 65 09 6b 43 | 6f 6e 6e 65 63 74 69 6f |efine.kC|onnectio|
|00000870| 6e 54 69 6d 65 4f 75 74 | 20 32 35 0d 0d 50 72 6f |nTimeOut| 25..Pro|
|00000880| 63 50 74 72 20 67 53 74 | 61 74 75 73 50 72 6f 63 |cPtr gSt|atusProc|
|00000890| 3b 09 09 2f 2a 20 73 74 | 61 74 75 73 20 70 72 6f |;../* st|atus pro|
|000008a0| 63 65 64 75 72 65 20 66 | 6f 72 20 63 61 6c 6c 62 |cedure f|or callb|
|000008b0| 61 63 6b 73 20 2a 2f 0d | 0d 0d 2f 2a 09 53 61 79 |acks */.|../*.Say|
|000008c0| 48 65 6c 6c 6f 20 69 73 | 20 63 61 6c 6c 65 64 20 |Hello is| called |
|000008d0| 61 66 74 65 72 20 61 20 | 63 6f 6e 74 72 6f 6c 2d |after a |control-|
|000008e0| 70 6f 72 74 20 63 6f 6e | 6e 65 63 74 69 6f 6e 20 |port con|nection |
|000008f0| 68 61 73 20 62 65 65 6e | 20 65 73 74 61 62 6c 69 |has been| establi|
|00000900| 73 68 65 64 2e 0d 09 49 | 74 20 63 68 65 63 6b 73 |shed...I|t checks|
|00000910| 20 74 68 65 20 73 74 61 | 74 75 73 20 6f 66 20 74 | the sta|tus of t|
|00000920| 68 65 20 63 6f 6e 6e 65 | 63 74 69 6f 6e 2e 0d 2a |he conne|ction..*|
|00000930| 2f 0d 0d 4f 53 45 72 72 | 20 53 61 79 48 65 6c 6c |/..OSErr| SayHell|
|00000940| 6f 28 75 6e 73 69 67 6e | 65 64 20 6c 6f 6e 67 20 |o(unsign|ed long |
|00000950| 63 6f 6e 6e 49 44 29 0d | 7b 0d 09 4f 53 45 72 72 |connID).|{..OSErr|
|00000960| 20 65 72 72 3b 0d 09 50 | 74 72 20 64 61 74 61 50 | err;..P|tr dataP|
|00000970| 74 72 3b 0d 09 75 6e 73 | 69 67 6e 65 64 20 73 68 |tr;..uns|igned sh|
|00000980| 6f 72 74 20 64 61 74 61 | 4c 65 6e 20 3d 20 63 44 |ort data|Len = cD|
|00000990| 61 74 61 4c 65 6e 3b 0d | 09 0d 09 64 61 74 61 50 |ataLen;.|...dataP|
|000009a0| 74 72 20 3d 20 4d 79 4e | 65 77 50 74 72 28 28 75 |tr = MyN|ewPtr((u|
|000009b0| 6e 73 69 67 6e 65 64 20 | 6c 6f 6e 67 29 63 44 61 |nsigned |long)cDa|
|000009c0| 74 61 4c 65 6e 29 3b 0d | 09 69 66 20 28 4d 79 4d |taLen);.|.if (MyM|
|000009d0| 65 6d 45 72 72 28 29 20 | 21 3d 20 6e 6f 45 72 72 |emErr() |!= noErr|
|000009e0| 29 0d 09 09 72 65 74 75 | 72 6e 20 4d 79 4d 65 6d |)...retu|rn MyMem|
|000009f0| 45 72 72 28 29 3b 0d 09 | 69 66 20 28 28 65 72 72 |Err();..|if ((err|
|00000a00| 20 3d 20 52 65 63 76 44 | 61 74 61 28 63 6f 6e 6e | = RecvD|ata(conn|
|00000a10| 49 44 2c 64 61 74 61 50 | 74 72 2c 26 64 61 74 61 |ID,dataP|tr,&data|
|00000a20| 4c 65 6e 2c 66 61 6c 73 | 65 29 29 20 3d 3d 20 6e |Len,fals|e)) == n|
|00000a30| 6f 45 72 72 29 20 7b 0d | 09 09 65 72 72 20 3d 20 |oErr) {.|..err = |
|00000a40| 28 73 74 72 6e 63 6d 70 | 28 28 63 68 61 72 20 2a |(strncmp|((char *|
|00000a50| 29 64 61 74 61 50 74 72 | 2c 22 32 32 30 22 2c 33 |)dataPtr|,"220",3|
|00000a60| 29 3d 3d 30 29 20 3f 20 | 6e 6f 45 72 72 20 3a 20 |)==0) ? |noErr : |
|00000a70| 63 43 6f 6e 6e 45 72 72 | 3b 0d 09 7d 0d 09 4d 79 |cConnErr|;..}..My|
|00000a80| 44 69 73 70 6f 73 50 74 | 72 28 64 61 74 61 50 74 |DisposPt|r(dataPt|
|00000a90| 72 29 3b 0d 09 72 65 74 | 75 72 6e 20 65 72 72 3b |r);..ret|urn err;|
|00000aa0| 0d 7d 0d 0d 0d 2f 2a 09 | 55 73 65 72 41 75 74 68 |.}.../*.|UserAuth|
|00000ab0| 20 69 73 20 63 61 6c 6c | 65 64 20 6f 6e 63 65 20 | is call|ed once |
|00000ac0| 61 20 63 6f 6e 74 72 6f | 6c 20 63 6f 6e 6e 65 63 |a contro|l connec|
|00000ad0| 74 69 6f 6e 20 68 61 73 | 20 62 65 65 6e 20 6f 70 |tion has| been op|
|00000ae0| 65 6e 65 64 20 61 6e 64 | 0d 09 63 68 65 63 6b 65 |ened and|..checke|
|00000af0| 64 2e 20 20 49 74 20 73 | 65 6e 64 73 20 74 68 65 |d. It s|ends the|
|00000b00| 20 75 73 65 72 27 73 20 | 6e 61 6d 65 20 61 6e 64 | user's |name and|
|00000b10| 20 70 61 73 73 77 6f 72 | 64 20 61 63 72 6f 73 73 | passwor|d across|
|00000b20| 20 74 68 65 20 6e 65 74 | 77 6f 72 6b 0d 09 66 6f | the net|work..fo|
|00000b30| 72 20 61 75 74 68 65 6e | 74 69 63 61 74 69 6f 6e |r authen|tication|
|00000b40| 2e 20 20 49 66 20 74 68 | 65 20 75 73 65 72 20 69 |. If th|e user i|
|00000b50| 73 20 73 75 63 65 73 73 | 66 75 6c 6c 79 20 61 75 |s sucess|fully au|
|00000b60| 74 68 65 6e 74 69 63 61 | 74 65 64 2c 20 61 0d 09 |thentica|ted, a..|
|00000b70| 63 6f 64 65 20 6f 66 20 | 6e 6f 45 72 72 20 69 73 |code of |noErr is|
|00000b80| 20 72 65 74 75 72 6e 65 | 64 2e 0d 2a 2f 0d 0d 4f | returne|d..*/..O|
|00000b90| 53 45 72 72 20 55 73 65 | 72 41 75 74 68 28 75 6e |SErr Use|rAuth(un|
|00000ba0| 73 69 67 6e 65 64 20 6c | 6f 6e 67 20 63 6f 6e 6e |signed l|ong conn|
|00000bb0| 49 44 2c 63 68 61 72 20 | 2a 75 73 65 72 49 44 2c |ID,char |*userID,|
|00000bc0| 63 68 61 72 20 2a 70 61 | 73 73 77 6f 72 64 29 0d |char *pa|ssword).|
|00000bd0| 7b 0d 09 4f 53 45 72 72 | 20 65 72 72 3b 0d 09 50 |{..OSErr| err;..P|
|00000be0| 74 72 20 73 65 6e 64 42 | 75 66 66 3b 0d 09 50 74 |tr sendB|uff;..Pt|
|00000bf0| 72 20 72 65 73 70 42 75 | 66 66 3b 0d 09 75 6e 73 |r respBu|ff;..uns|
|00000c00| 69 67 6e 65 64 20 73 68 | 6f 72 74 20 72 65 73 70 |igned sh|ort resp|
|00000c10| 4c 65 6e 3b 0d 09 0d 09 | 73 65 6e 64 42 75 66 66 |Len;....|sendBuff|
|00000c20| 20 3d 20 4d 79 4e 65 77 | 50 74 72 28 28 75 6e 73 | = MyNew|Ptr((uns|
|00000c30| 69 67 6e 65 64 20 6c 6f | 6e 67 29 20 28 31 30 2b |igned lo|ng) (10+|
|00000c40| 28 73 74 72 6c 65 6e 28 | 75 73 65 72 49 44 29 3e |(strlen(|userID)>|
|00000c50| 73 74 72 6c 65 6e 28 70 | 61 73 73 77 6f 72 64 29 |strlen(p|assword)|
|00000c60| 20 3f 20 73 74 72 6c 65 | 6e 28 75 73 65 72 49 44 | ? strle|n(userID|
|00000c70| 29 20 3a 20 73 74 72 6c | 65 6e 28 70 61 73 73 77 |) : strl|en(passw|
|00000c80| 6f 72 64 29 29 29 29 3b | 0d 09 69 66 20 28 4d 79 |ord))));|..if (My|
|00000c90| 4d 65 6d 45 72 72 28 29 | 20 21 3d 20 6e 6f 45 72 |MemErr()| != noEr|
|00000ca0| 72 29 0d 09 09 72 65 74 | 75 72 6e 20 4d 79 4d 65 |r)...ret|urn MyMe|
|00000cb0| 6d 45 72 72 28 29 3b 0d | 09 73 74 72 63 70 79 28 |mErr();.|.strcpy(|
|00000cc0| 28 63 68 61 72 20 2a 29 | 73 65 6e 64 42 75 66 66 |(char *)|sendBuff|
|00000cd0| 2c 22 55 53 45 52 20 22 | 29 3b 0d 09 73 74 72 63 |,"USER "|);..strc|
|00000ce0| 61 74 28 28 63 68 61 72 | 20 2a 29 73 65 6e 64 42 |at((char| *)sendB|
|00000cf0| 75 66 66 2c 75 73 65 72 | 49 44 29 3b 0d 09 73 74 |uff,user|ID);..st|
|00000d00| 72 63 61 74 28 28 63 68 | 61 72 20 2a 29 73 65 6e |rcat((ch|ar *)sen|
|00000d10| 64 42 75 66 66 2c 43 52 | 4c 46 29 3b 0d 09 69 66 |dBuff,CR|LF);..if|
|00000d20| 20 28 28 65 72 72 20 3d | 20 53 65 6e 64 43 6f 6d | ((err =| SendCom|
|00000d30| 6d 61 6e 64 28 63 6f 6e | 6e 49 44 2c 73 65 6e 64 |mand(con|nID,send|
|00000d40| 42 75 66 66 2c 26 72 65 | 73 70 42 75 66 66 2c 26 |Buff,&re|spBuff,&|
|00000d50| 72 65 73 70 4c 65 6e 29 | 29 20 3d 3d 20 6e 6f 45 |respLen)|) == noE|
|00000d60| 72 72 29 20 7b 0d 09 09 | 69 66 20 28 28 65 72 72 |rr) {...|if ((err|
|00000d70| 20 3d 20 28 73 74 72 6e | 63 6d 70 28 28 63 68 61 | = (strn|cmp((cha|
|00000d80| 72 20 2a 29 72 65 73 70 | 42 75 66 66 2c 22 33 33 |r *)resp|Buff,"33|
|00000d90| 31 22 2c 33 29 3d 3d 30 | 29 20 3f 20 6e 6f 45 72 |1",3)==0|) ? noEr|
|00000da0| 72 20 3a 20 63 41 63 63 | 65 73 73 45 72 72 29 20 |r : cAcc|essErr) |
|00000db0| 3d 3d 20 6e 6f 45 72 72 | 29 20 7b 0d 09 09 09 4d |== noErr|) {....M|
|00000dc0| 79 44 69 73 70 6f 73 50 | 74 72 28 72 65 73 70 42 |yDisposP|tr(respB|
|00000dd0| 75 66 66 29 3b 0d 09 09 | 09 73 74 72 63 70 79 28 |uff);...|.strcpy(|
|00000de0| 28 63 68 61 72 20 2a 29 | 73 65 6e 64 42 75 66 66 |(char *)|sendBuff|
|00000df0| 2c 22 50 41 53 53 20 22 | 29 3b 0d 09 09 09 73 74 |,"PASS "|);....st|
|00000e00| 72 63 61 74 28 28 63 68 | 61 72 20 2a 29 73 65 6e |rcat((ch|ar *)sen|
|00000e10| 64 42 75 66 66 2c 70 61 | 73 73 77 6f 72 64 29 3b |dBuff,pa|ssword);|
|00000e20| 0d 09 09 09 73 74 72 63 | 61 74 28 28 63 68 61 72 |....strc|at((char|
|00000e30| 20 2a 29 73 65 6e 64 42 | 75 66 66 2c 43 52 4c 46 | *)sendB|uff,CRLF|
|00000e40| 29 3b 0d 09 09 09 69 66 | 20 28 28 65 72 72 20 3d |);....if| ((err =|
|00000e50| 20 53 65 6e 64 43 6f 6d | 6d 61 6e 64 28 63 6f 6e | SendCom|mand(con|
|00000e60| 6e 49 44 2c 73 65 6e 64 | 42 75 66 66 2c 26 72 65 |nID,send|Buff,&re|
|00000e70| 73 70 42 75 66 66 2c 26 | 72 65 73 70 4c 65 6e 29 |spBuff,&|respLen)|
|00000e80| 29 20 3d 3d 20 6e 6f 45 | 72 72 29 20 7b 0d 09 09 |) == noE|rr) {...|
|00000e90| 09 09 65 72 72 20 3d 20 | 28 73 74 72 6e 63 6d 70 |..err = |(strncmp|
|00000ea0| 28 28 63 68 61 72 20 2a | 29 72 65 73 70 42 75 66 |((char *|)respBuf|
|00000eb0| 66 2c 22 32 33 30 22 2c | 33 29 3d 3d 30 29 20 3f |f,"230",|3)==0) ?|
|00000ec0| 20 6e 6f 45 72 72 20 3a | 20 63 41 63 63 65 73 73 | noErr :| cAccess|
|00000ed0| 45 72 72 3b 0d 09 09 09 | 7d 0d 09 09 7d 0d 09 7d |Err;....|}...}..}|
|00000ee0| 0d 09 4d 79 44 69 73 70 | 6f 73 50 74 72 28 73 65 |..MyDisp|osPtr(se|
|00000ef0| 6e 64 42 75 66 66 29 3b | 0d 09 4d 79 44 69 73 70 |ndBuff);|..MyDisp|
|00000f00| 6f 73 50 74 72 28 72 65 | 73 70 42 75 66 66 29 3b |osPtr(re|spBuff);|
|00000f10| 0d 09 72 65 74 75 72 6e | 20 65 72 72 3b 0d 7d 0d |..return| err;.}.|
|00000f20| 0d 0d 2f 2a 09 53 65 6e | 64 43 6f 6d 6d 61 6e 64 |../*.Sen|dCommand|
|00000f30| 20 69 73 20 75 73 65 64 | 20 74 6f 20 73 65 6e 64 | is used| to send|
|00000f40| 20 61 20 63 6f 6d 6d 61 | 6e 64 20 61 6c 6f 6e 67 | a comma|nd along|
|00000f50| 20 61 20 54 43 50 20 63 | 6f 6e 6e 65 63 74 69 6f | a TCP c|onnectio|
|00000f60| 6e 20 61 6e 64 20 67 65 | 74 20 61 0d 09 72 65 73 |n and ge|t a..res|
|00000f70| 70 6f 6e 73 65 20 62 61 | 63 6b 2e 20 20 49 74 20 |ponse ba|ck. It |
|00000f80| 69 73 20 75 73 65 66 75 | 6c 20 69 6e 20 68 61 6e |is usefu|l in han|
|00000f90| 64 73 68 61 6b 69 6e 67 | 20 70 72 6f 74 6f 63 6f |dshaking| protoco|
|00000fa0| 6c 73 20 73 75 63 68 20 | 61 73 20 74 68 65 20 6f |ls such |as the o|
|00000fb0| 6e 65 0d 09 75 73 65 64 | 20 74 6f 20 73 65 74 20 |ne..used| to set |
|00000fc0| 75 70 20 74 72 61 6e 73 | 66 65 72 73 20 66 6f 72 |up trans|fers for|
|00000fd0| 20 46 54 50 2e 0d 2a 2f | 0d 0d 4f 53 45 72 72 20 | FTP..*/|..OSErr |
|00000fe0| 53 65 6e 64 43 6f 6d 6d | 61 6e 64 28 75 6e 73 69 |SendComm|and(unsi|
|00000ff0| 67 6e 65 64 20 6c 6f 6e | 67 20 63 6f 6e 6e 49 44 |gned lon|g connID|
|00001000| 2c 63 68 61 72 20 2a 63 | 6f 6d 6d 61 6e 64 2c 50 |,char *c|ommand,P|
|00001010| 74 72 20 2a 72 65 73 70 | 6f 6e 73 65 2c 75 6e 73 |tr *resp|onse,uns|
|00001020| 69 67 6e 65 64 20 73 68 | 6f 72 74 20 2a 72 65 73 |igned sh|ort *res|
|00001030| 70 4c 65 6e 29 0d 7b 0d | 09 4f 53 45 72 72 20 65 |pLen).{.|.OSErr e|
|00001040| 72 72 3b 0d 09 75 6e 73 | 69 67 6e 65 64 20 73 68 |rr;..uns|igned sh|
|00001050| 6f 72 74 20 72 65 73 70 | 4c 65 66 74 2c 6f 6e 65 |ort resp|Left,one|
|00001060| 4c 65 6e 3b 0d 09 63 68 | 61 72 20 2a 62 75 66 50 |Len;..ch|ar *bufP|
|00001070| 74 72 3b 0d 09 0d 09 72 | 65 73 70 4c 65 66 74 20 |tr;....r|espLeft |
|00001080| 3d 20 28 75 6e 73 69 67 | 6e 65 64 20 73 68 6f 72 |= (unsig|ned shor|
|00001090| 74 29 20 63 44 61 74 61 | 4c 65 6e 20 2d 20 31 3b |t) cData|Len - 1;|
|000010a0| 0d 09 2a 72 65 73 70 4c | 65 6e 20 3d 20 30 3b 0d |..*respL|en = 0;.|
|000010b0| 09 62 75 66 50 74 72 20 | 3d 20 2a 72 65 73 70 6f |.bufPtr |= *respo|
|000010c0| 6e 73 65 20 3d 20 4d 79 | 4e 65 77 50 74 72 28 28 |nse = My|NewPtr((|
|000010d0| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 29 63 44 |unsigned| long)cD|
|000010e0| 61 74 61 4c 65 6e 29 3b | 0d 09 2a 62 75 66 50 74 |ataLen);|..*bufPt|
|000010f0| 72 20 3d 20 27 5c 30 27 | 3b 0d 09 69 66 20 28 4d |r = '\0'|;..if (M|
|00001100| 79 4d 65 6d 45 72 72 28 | 29 20 21 3d 20 6e 6f 45 |yMemErr(|) != noE|
|00001110| 72 72 29 0d 09 09 72 65 | 74 75 72 6e 20 4d 79 4d |rr)...re|turn MyM|
|00001120| 65 6d 45 72 72 28 29 3b | 0d 0d 09 69 66 20 28 28 |emErr();|...if ((|
|00001130| 65 72 72 20 3d 20 53 65 | 6e 64 44 61 74 61 28 63 |err = Se|ndData(c|
|00001140| 6f 6e 6e 49 44 2c 28 50 | 74 72 29 63 6f 6d 6d 61 |onnID,(P|tr)comma|
|00001150| 6e 64 2c 28 75 6e 73 69 | 67 6e 65 64 20 73 68 6f |nd,(unsi|gned sho|
|00001160| 72 74 29 73 74 72 6c 65 | 6e 28 63 6f 6d 6d 61 6e |rt)strle|n(comman|
|00001170| 64 29 2c 66 61 6c 73 65 | 29 29 20 3d 3d 20 6e 6f |d),false|)) == no|
|00001180| 45 72 72 29 0d 09 09 64 | 6f 20 7b 0d 09 09 09 6f |Err)...d|o {....o|
|00001190| 6e 65 4c 65 6e 20 3d 20 | 72 65 73 70 4c 65 66 74 |neLen = |respLeft|
|000011a0| 3b 0d 09 09 09 65 72 72 | 20 3d 20 52 65 63 76 44 |;....err| = RecvD|
|000011b0| 61 74 61 28 63 6f 6e 6e | 49 44 2c 62 75 66 50 74 |ata(conn|ID,bufPt|
|000011c0| 72 2c 26 6f 6e 65 4c 65 | 6e 2c 66 61 6c 73 65 29 |r,&oneLe|n,false)|
|000011d0| 3b 0d 09 09 09 69 66 20 | 28 65 72 72 3d 3d 6e 6f |;....if |(err==no|
|000011e0| 45 72 72 29 20 7b 0d 09 | 09 09 09 62 75 66 50 74 |Err) {..|...bufPt|
|000011f0| 72 20 2b 3d 20 6f 6e 65 | 4c 65 6e 3b 0d 09 09 09 |r += one|Len;....|
|00001200| 09 2a 62 75 66 50 74 72 | 20 3d 20 27 5c 30 27 3b |.*bufPtr| = '\0';|
|00001210| 0d 09 09 09 09 2a 72 65 | 73 70 4c 65 6e 20 2b 3d |.....*re|spLen +=|
|00001220| 20 6f 6e 65 4c 65 6e 3b | 0d 09 09 09 09 72 65 73 | oneLen;|.....res|
|00001230| 70 4c 65 66 74 20 2d 3d | 20 6f 6e 65 4c 65 6e 3b |pLeft -=| oneLen;|
|00001240| 0d 09 09 09 7d 0d 09 09 | 7d 0d 09 09 77 68 69 6c |....}...|}...whil|
|00001250| 65 20 28 65 72 72 3d 3d | 6e 6f 45 72 72 20 26 26 |e (err==|noErr &&|
|00001260| 20 72 65 73 70 4c 65 66 | 74 20 3e 20 30 20 26 26 | respLef|t > 0 &&|
|00001270| 20 2a 28 62 75 66 50 74 | 72 2d 31 29 21 3d 4c 46 | *(bufPt|r-1)!=LF|
|00001280| 29 3b 0d 09 0d 09 69 66 | 20 28 65 72 72 20 3d 3d |);....if| (err ==|
|00001290| 20 6e 6f 45 72 72 29 0d | 09 09 28 67 53 74 61 74 | noErr).|..(gStat|
|000012a0| 75 73 50 72 6f 63 29 28 | 2a 72 65 73 70 6f 6e 73 |usProc)(|*respons|
|000012b0| 65 29 3b 0d 09 0d 09 72 | 65 74 75 72 6e 20 65 72 |e);....r|eturn er|
|000012c0| 72 3b 0d 7d 0d 0d 0d 2f | 2a 09 4d 61 6b 65 44 61 |r;.}.../|*.MakeDa|
|000012d0| 74 61 53 74 72 65 61 6d | 20 69 73 20 63 61 6c 6c |taStream| is call|
|000012e0| 65 64 20 77 68 65 6e 20 | 61 20 64 61 74 61 20 74 |ed when |a data t|
|000012f0| 72 61 6e 73 66 65 72 20 | 69 73 20 61 62 6f 75 74 |ransfer |is about|
|00001300| 20 74 6f 20 62 65 20 73 | 74 61 72 74 65 64 2e 0d | to be s|tarted..|
|00001310| 09 49 74 20 73 65 74 73 | 20 75 70 20 61 20 73 65 |.It sets| up a se|
|00001320| 63 6f 6e 64 61 72 79 20 | 54 43 50 20 63 6f 6d 6d |condary |TCP comm|
|00001330| 75 6e 69 63 61 74 69 6f | 6e 73 20 63 68 61 6e 6e |unicatio|ns chann|
|00001340| 65 64 20 62 65 74 77 65 | 65 6e 20 74 68 65 20 63 |ed betwe|en the c|
|00001350| 6c 69 65 6e 74 0d 09 61 | 6e 64 20 73 65 72 76 65 |lient..a|nd serve|
|00001360| 72 20 66 6f 72 20 74 68 | 65 20 74 72 61 6e 73 66 |r for th|e transf|
|00001370| 65 72 20 6f 66 20 64 61 | 74 61 2e 0d 2a 2f 0d 0d |er of da|ta..*/..|
|00001380| 4f 53 45 72 72 20 4d 61 | 6b 65 44 61 74 61 53 74 |OSErr Ma|keDataSt|
|00001390| 72 65 61 6d 28 75 6e 73 | 69 67 6e 65 64 20 6c 6f |ream(uns|igned lo|
|000013a0| 6e 67 20 2a 64 61 74 61 | 43 6f 6e 6e 49 44 2c 74 |ng *data|ConnID,t|
|000013b0| 63 70 5f 70 6f 72 74 20 | 6c 6f 63 61 6c 50 6f 72 |cp_port |localPor|
|000013c0| 74 2c 54 43 50 69 6f 70 | 62 20 2a 2a 70 42 6c 6f |t,TCPiop|b **pBlo|
|000013d0| 63 6b 29 0d 7b 0d 09 4f | 53 45 72 72 20 65 72 72 |ck).{..O|SErr err|
|000013e0| 3b 0d 09 50 74 72 20 72 | 65 63 76 42 50 74 72 3b |;..Ptr r|ecvBPtr;|
|000013f0| 0d 09 75 6e 73 69 67 6e | 65 64 20 6c 6f 6e 67 20 |..unsign|ed long |
|00001400| 72 65 63 76 42 4c 65 6e | 20 3d 20 63 52 42 75 66 |recvBLen| = cRBuf|
|00001410| 44 61 74 61 4c 65 6e 3b | 0d 09 6c 6f 6e 67 20 72 |DataLen;|..long r|
|00001420| 65 6d 6f 74 65 48 6f 73 | 74 20 3d 20 30 3b 0d 09 |emoteHos|t = 0;..|
|00001430| 73 68 6f 72 74 20 72 65 | 6d 6f 74 65 50 6f 72 74 |short re|motePort|
|00001440| 20 3d 20 30 3b 0d 09 0d | 09 72 65 63 76 42 50 74 | = 0;...|.recvBPt|
|00001450| 72 20 3d 20 4d 79 4e 65 | 77 50 74 72 28 72 65 63 |r = MyNe|wPtr(rec|
|00001460| 76 42 4c 65 6e 29 3b 0d | 09 69 66 20 28 4d 79 4d |vBLen);.|.if (MyM|
|00001470| 65 6d 45 72 72 28 29 20 | 21 3d 20 6e 6f 45 72 72 |emErr() |!= noErr|
|00001480| 29 0d 09 09 72 65 74 75 | 72 6e 20 4d 79 4d 65 6d |)...retu|rn MyMem|
|00001490| 45 72 72 28 29 3b 0d 09 | 65 72 72 20 3d 20 43 72 |Err();..|err = Cr|
|000014a0| 65 61 74 65 53 74 72 65 | 61 6d 28 64 61 74 61 43 |eateStre|am(dataC|
|000014b0| 6f 6e 6e 49 44 2c 72 65 | 63 76 42 4c 65 6e 29 3b |onnID,re|cvBLen);|
|000014c0| 0d 09 69 66 20 28 65 72 | 72 20 3d 3d 20 6e 6f 45 |..if (er|r == noE|
|000014d0| 72 72 29 0d 09 09 41 73 | 79 6e 63 57 61 69 74 46 |rr)...As|yncWaitF|
|000014e0| 6f 72 43 6f 6e 6e 65 63 | 74 69 6f 6e 28 2a 64 61 |orConnec|tion(*da|
|000014f0| 74 61 43 6f 6e 6e 49 44 | 2c 6b 43 6f 6e 6e 65 63 |taConnID|,kConnec|
|00001500| 74 69 6f 6e 54 69 6d 65 | 4f 75 74 2c 6c 6f 63 61 |tionTime|Out,loca|
|00001510| 6c 50 6f 72 74 2c 72 65 | 6d 6f 74 65 48 6f 73 74 |lPort,re|moteHost|
|00001520| 2c 0d 09 09 09 09 09 09 | 09 09 72 65 6d 6f 74 65 |,.......|..remote|
|00001530| 50 6f 72 74 2c 70 42 6c | 6f 63 6b 29 3b 0d 09 72 |Port,pBl|ock);..r|
|00001540| 65 74 75 72 6e 20 65 72 | 72 3b 0d 7d 0d 0d 0d 2f |eturn er|r;.}.../|
|00001550| 2a 09 47 65 74 44 69 72 | 65 63 74 44 61 74 61 20 |*.GetDir|ectData |
|00001560| 69 73 20 63 61 6c 6c 65 | 64 20 74 6f 20 72 65 63 |is calle|d to rec|
|00001570| 65 69 76 65 20 74 65 78 | 74 75 61 6c 20 64 61 74 |eive tex|tual dat|
|00001580| 61 2c 20 73 75 63 68 20 | 61 73 20 74 68 65 20 72 |a, such |as the r|
|00001590| 65 73 70 6f 6e 73 65 0d | 09 66 72 6f 6d 20 61 6e |esponse.|.from an|
|000015a0| 20 27 6c 73 27 20 63 6f | 6d 6d 61 6e 64 2e 20 20 | 'ls' co|mmand. |
|000015b0| 54 68 65 20 64 61 74 61 | 20 72 65 63 65 69 76 65 |The data| receive|
|000015c0| 64 20 69 73 20 70 61 73 | 73 65 64 20 62 61 63 6b |d is pas|sed back|
|000015d0| 20 69 6e 20 61 6e 20 61 | 6c 6c 6f 63 61 74 65 64 | in an a|llocated|
|000015e0| 0d 09 70 6f 69 6e 74 65 | 72 2e 0d 2a 2f 0d 0d 4f |..pointe|r..*/..O|
|000015f0| 53 45 72 72 20 47 65 74 | 44 69 72 65 63 74 44 61 |SErr Get|DirectDa|
|00001600| 74 61 28 75 6e 73 69 67 | 6e 65 64 20 6c 6f 6e 67 |ta(unsig|ned long|
|00001610| 20 64 61 74 61 43 6f 6e | 6e 49 44 2c 50 74 72 20 | dataCon|nID,Ptr |
|00001620| 2a 64 69 72 65 63 74 6f | 72 79 2c 54 43 50 69 6f |*directo|ry,TCPio|
|00001630| 70 62 20 2a 70 42 6c 6f | 63 6b 29 0d 7b 0d 09 4f |pb *pBlo|ck).{..O|
|00001640| 53 45 72 72 20 65 72 72 | 3b 0d 09 75 6e 73 69 67 |SErr err|;..unsig|
|00001650| 6e 65 64 20 73 68 6f 72 | 74 20 6c 65 6e 67 74 68 |ned shor|t length|
|00001660| 20 3d 20 63 58 66 65 72 | 42 6c 6f 63 6b 53 69 7a | = cXfer|BlockSiz|
|00001670| 65 3b 0d 09 6c 6f 6e 67 | 20 72 65 6d 6f 74 65 48 |e;..long| remoteH|
|00001680| 6f 73 74 3b 0d 09 73 68 | 6f 72 74 20 72 65 6d 6f |ost;..sh|ort remo|
|00001690| 74 65 50 6f 72 74 3b 0d | 09 50 74 72 20 74 72 61 |tePort;.|.Ptr tra|
|000016a0| 6e 73 66 65 72 42 6c 6f | 63 6b 3b 0d 09 53 69 7a |nsferBlo|ck;..Siz|
|000016b0| 65 20 74 6f 74 61 6c 4c | 65 6e 67 74 68 20 3d 20 |e totalL|ength = |
|000016c0| 30 3b 0d 09 4f 53 45 72 | 72 20 65 72 72 32 3b 0d |0;..OSEr|r err2;.|
|000016d0| 09 48 61 6e 64 6c 65 20 | 74 68 65 48 6e 64 6c 3b |.Handle |theHndl;|
|000016e0| 0d 09 0d 09 77 68 69 6c | 65 20 28 70 42 6c 6f 63 |....whil|e (pBloc|
|000016f0| 6b 2d 3e 69 6f 52 65 73 | 75 6c 74 20 3e 20 30 29 |k->ioRes|ult > 0)|
|00001700| 0d 09 09 47 69 76 65 54 | 69 6d 65 28 63 53 6c 65 |...GiveT|ime(cSle|
|00001710| 65 70 54 69 6d 65 29 3b | 0d 09 09 0d 09 65 72 72 |epTime);|.....err|
|00001720| 20 3d 20 41 73 79 6e 63 | 47 65 74 43 6f 6e 6e 65 | = Async|GetConne|
|00001730| 63 74 69 6f 6e 44 61 74 | 61 28 70 42 6c 6f 63 6b |ctionDat|a(pBlock|
|00001740| 2c 26 72 65 6d 6f 74 65 | 48 6f 73 74 2c 26 72 65 |,&remote|Host,&re|
|00001750| 6d 6f 74 65 50 6f 72 74 | 29 3b 0d 09 0d 09 69 66 |motePort|);....if|
|00001760| 20 28 65 72 72 20 3d 3d | 20 6e 6f 45 72 72 29 20 | (err ==| noErr) |
|00001770| 7b 0d 09 09 74 68 65 48 | 6e 64 6c 20 3d 20 4d 79 |{...theH|ndl = My|
|00001780| 4e 65 77 48 61 6e 64 6c | 65 28 28 75 6e 73 69 67 |NewHandl|e((unsig|
|00001790| 6e 65 64 20 6c 6f 6e 67 | 29 63 58 66 65 72 42 6c |ned long|)cXferBl|
|000017a0| 6f 63 6b 53 69 7a 65 29 | 3b 0d 09 09 69 66 20 28 |ockSize)|;...if (|
|000017b0| 4d 79 4d 65 6d 45 72 72 | 28 29 20 21 3d 20 6e 6f |MyMemErr|() != no|
|000017c0| 45 72 72 29 0d 09 09 09 | 72 65 74 75 72 6e 20 4d |Err)....|return M|
|000017d0| 79 4d 65 6d 45 72 72 28 | 29 3b 0d 09 09 48 4c 6f |yMemErr(|);...HLo|
|000017e0| 63 6b 28 74 68 65 48 6e | 64 6c 29 3b 0d 09 09 2a |ck(theHn|dl);...*|
|000017f0| 64 69 72 65 63 74 6f 72 | 79 20 3d 20 74 72 61 6e |director|y = tran|
|00001800| 73 66 65 72 42 6c 6f 63 | 6b 20 3d 20 2a 74 68 65 |sferBloc|k = *the|
|00001810| 48 6e 64 6c 3b 0d 09 09 | 2a 2a 64 69 72 65 63 74 |Hndl;...|**direct|
|00001820| 6f 72 79 20 3d 20 27 5c | 30 27 3b 0d 09 09 64 6f |ory = '\|0';...do|
|00001830| 20 7b 0d 09 09 09 6c 65 | 6e 67 74 68 20 3d 20 63 | {....le|ngth = c|
|00001840| 58 66 65 72 42 6c 6f 63 | 6b 53 69 7a 65 3b 0d 09 |XferBloc|kSize;..|
|00001850| 09 09 65 72 72 20 3d 20 | 52 65 63 76 44 61 74 61 |..err = |RecvData|
|00001860| 28 64 61 74 61 43 6f 6e | 6e 49 44 2c 74 72 61 6e |(dataCon|nID,tran|
|00001870| 73 66 65 72 42 6c 6f 63 | 6b 2c 26 6c 65 6e 67 74 |sferBloc|k,&lengt|
|00001880| 68 2c 66 61 6c 73 65 29 | 3b 0d 09 09 09 69 66 20 |h,false)|;....if |
|00001890| 28 65 72 72 20 3d 3d 20 | 6e 6f 45 72 72 20 7c 7c |(err == |noErr |||
|000018a0| 20 65 72 72 20 3d 3d 20 | 63 6f 6e 6e 65 63 74 69 | err == |connecti|
|000018b0| 6f 6e 43 6c 6f 73 69 6e | 67 29 20 7b 0d 09 09 09 |onClosin|g) {....|
|000018c0| 09 74 6f 74 61 6c 4c 65 | 6e 67 74 68 20 2b 3d 20 |.totalLe|ngth += |
|000018d0| 6c 65 6e 67 74 68 3b 0d | 09 09 09 09 48 55 6e 6c |length;.|....HUnl|
|000018e0| 6f 63 6b 28 74 68 65 48 | 6e 64 6c 29 3b 0d 09 09 |ock(theH|ndl);...|
|000018f0| 09 09 4d 79 53 65 74 48 | 61 6e 64 6c 65 53 69 7a |..MySetH|andleSiz|
|00001900| 65 28 74 68 65 48 6e 64 | 6c 2c 74 6f 74 61 6c 4c |e(theHnd|l,totalL|
|00001910| 65 6e 67 74 68 2b 63 58 | 66 65 72 42 6c 6f 63 6b |ength+cX|ferBlock|
|00001920| 53 69 7a 65 29 3b 0d 09 | 09 09 09 48 4c 6f 63 6b |Size);..|...HLock|
|00001930| 28 74 68 65 48 6e 64 6c | 29 3b 0d 09 09 09 09 2a |(theHndl|);.....*|
|00001940| 64 69 72 65 63 74 6f 72 | 79 20 3d 20 2a 74 68 65 |director|y = *the|
|00001950| 48 6e 64 6c 3b 0d 09 09 | 09 09 69 66 20 28 28 65 |Hndl;...|..if ((e|
|00001960| 72 72 32 20 3d 20 4d 79 | 4d 65 6d 45 72 72 28 29 |rr2 = My|MemErr()|
|00001970| 29 20 21 3d 20 6e 6f 45 | 72 72 29 20 7b 0d 09 09 |) != noE|rr) {...|
|00001980| 09 09 09 4d 79 44 69 73 | 70 6f 73 48 61 6e 64 6c |...MyDis|posHandl|
|00001990| 65 28 74 68 65 48 6e 64 | 6c 29 3b 0d 09 09 09 09 |e(theHnd|l);.....|
|000019a0| 09 72 65 74 75 72 6e 20 | 65 72 72 32 3b 0d 09 09 |.return |err2;...|
|000019b0| 09 09 7d 0d 09 09 09 09 | 74 72 61 6e 73 66 65 72 |..}.....|transfer|
|000019c0| 42 6c 6f 63 6b 20 2b 3d | 20 28 75 6e 73 69 67 6e |Block +=| (unsign|
|000019d0| 65 64 20 6c 6f 6e 67 29 | 20 6c 65 6e 67 74 68 3b |ed long)| length;|
|000019e0| 0d 09 09 09 7d 0d 09 09 | 09 47 69 76 65 54 69 6d |....}...|.GiveTim|
|000019f0| 65 28 63 53 6c 65 65 70 | 54 69 6d 65 29 3b 0d 09 |e(cSleep|Time);..|
|00001a00| 09 7d 20 77 68 69 6c 65 | 20 28 65 72 72 20 3d 3d |.} while| (err ==|
|00001a10| 20 6e 6f 45 72 72 29 3b | 0d 09 09 69 66 20 28 65 | noErr);|...if (e|
|00001a20| 72 72 20 3d 3d 20 63 6f | 6e 6e 65 63 74 69 6f 6e |rr == co|nnection|
|00001a30| 43 6c 6f 73 69 6e 67 29 | 20 7b 0d 09 09 09 65 72 |Closing)| {....er|
|00001a40| 72 20 3d 20 6e 6f 45 72 | 72 3b 0d 09 09 09 69 66 |r = noEr|r;....if|
|00001a50| 20 28 74 6f 74 61 6c 4c | 65 6e 67 74 68 29 0d 09 | (totalL|ength)..|
|00001a60| 09 09 09 46 69 78 43 52 | 4c 46 28 2a 64 69 72 65 |...FixCR|LF(*dire|
|00001a70| 63 74 6f 72 79 2c 26 74 | 6f 74 61 6c 4c 65 6e 67 |ctory,&t|otalLeng|
|00001a80| 74 68 29 3b 0d 09 09 09 | 2a 64 69 72 65 63 74 6f |th);....|*directo|
|00001a90| 72 79 20 3d 20 4d 79 4e | 65 77 50 74 72 28 74 6f |ry = MyN|ewPtr(to|
|00001aa0| 74 61 6c 4c 65 6e 67 74 | 68 29 3b 0d 09 09 09 69 |talLengt|h);....i|
|00001ab0| 66 20 28 28 65 72 72 20 | 3d 20 4d 79 4d 65 6d 45 |f ((err |= MyMemE|
|00001ac0| 72 72 28 29 29 20 3d 3d | 20 6e 6f 45 72 72 29 0d |rr()) ==| noErr).|
|00001ad0| 09 09 09 09 42 6c 6f 63 | 6b 4d 6f 76 65 28 2a 74 |....Bloc|kMove(*t|
|00001ae0| 68 65 48 6e 64 6c 2c 2a | 64 69 72 65 63 74 6f 72 |heHndl,*|director|
|00001af0| 79 2c 74 6f 74 61 6c 4c | 65 6e 67 74 68 29 3b 0d |y,totalL|ength);.|
|00001b00| 09 09 7d 0d 09 09 48 55 | 6e 6c 6f 63 6b 28 74 68 |..}...HU|nlock(th|
|00001b10| 65 48 6e 64 6c 29 3b 0d | 09 09 4d 79 44 69 73 70 |eHndl);.|..MyDisp|
|00001b20| 6f 73 48 61 6e 64 6c 65 | 28 74 68 65 48 6e 64 6c |osHandle|(theHndl|
|00001b30| 29 3b 0d 09 7d 0d 09 72 | 65 74 75 72 6e 20 65 72 |);..}..r|eturn er|
|00001b40| 72 3b 0d 7d 0d 0d 0d 2f | 2a 09 53 65 6e 64 46 69 |r;.}.../|*.SendFi|
|00001b50| 6c 65 44 61 74 61 20 69 | 73 20 63 61 6c 6c 65 64 |leData i|s called|
|00001b60| 20 6f 6e 63 65 20 61 20 | 74 72 61 6e 73 66 65 72 | once a |transfer|
|00001b70| 20 68 61 73 20 62 65 65 | 6e 20 69 6e 69 74 69 61 | has bee|n initia|
|00001b80| 74 65 64 20 74 6f 20 73 | 65 6e 64 20 64 61 74 61 |ted to s|end data|
|00001b90| 0d 09 66 72 6f 6d 20 61 | 20 63 6c 69 65 6e 74 20 |..from a| client |
|00001ba0| 74 6f 20 61 20 73 65 72 | 76 65 72 2e 20 20 54 68 |to a ser|ver. Th|
|00001bb0| 65 20 64 61 74 61 20 69 | 73 20 73 65 6e 74 20 6f |e data i|s sent o|
|00001bc0| 75 74 20 61 6c 6f 6e 67 | 20 74 68 65 20 73 65 63 |ut along| the sec|
|00001bd0| 6f 6e 64 61 72 79 0d 09 | 64 61 74 61 20 63 68 61 |ondary..|data cha|
|00001be0| 6e 6e 65 6c 20 77 68 69 | 63 68 20 68 61 73 20 62 |nnel whi|ch has b|
|00001bf0| 65 65 6e 20 6e 65 67 6f | 74 69 61 74 65 64 20 62 |een nego|tiated b|
|00001c00| 65 74 77 65 65 6e 20 74 | 68 65 20 68 6f 73 74 73 |etween t|he hosts|
|00001c10| 2e 0d 2a 2f 0d 0d 2f 2a | 20 77 61 72 6e 69 6e 67 |..*/../*| warning|
|00001c20| 2d 2d 20 63 68 61 72 20 | 2a 64 61 74 61 20 69 73 |-- char |*data is|
|00001c30| 20 64 69 73 70 6f 73 65 | 64 20 62 79 20 74 68 69 | dispose|d by thi|
|00001c40| 73 20 72 6f 75 74 69 6e | 65 21 21 21 21 21 21 21 |s routin|e!!!!!!!|
|00001c50| 21 21 20 2a 2f 0d 0d 4f | 53 45 72 72 20 53 65 6e |!! */..O|SErr Sen|
|00001c60| 64 46 69 6c 65 44 61 74 | 61 28 75 6e 73 69 67 6e |dFileDat|a(unsign|
|00001c70| 65 64 20 6c 6f 6e 67 20 | 64 61 74 61 43 6f 6e 6e |ed long |dataConn|
|00001c80| 49 44 2c 63 68 61 72 20 | 2a 66 69 6c 65 4e 61 6d |ID,char |*fileNam|
|00001c90| 65 2c 63 68 61 72 20 2a | 64 61 74 61 2c 0d 09 09 |e,char *|data,...|
|00001ca0| 09 09 09 54 72 61 6e 73 | 54 79 70 65 20 74 54 79 |...Trans|Type tTy|
|00001cb0| 70 65 2c 6c 6f 6e 67 20 | 73 69 7a 65 2c 54 43 50 |pe,long |size,TCP|
|00001cc0| 69 6f 70 62 20 2a 70 42 | 6c 6f 63 6b 29 0d 7b 0d |iopb *pB|lock).{.|
|00001cd0| 09 23 70 72 61 67 6d 61 | 20 75 6e 75 73 65 64 20 |.#pragma| unused |
|00001ce0| 28 66 69 6c 65 4e 61 6d | 65 2c 74 54 79 70 65 29 |(fileNam|e,tType)|
|00001cf0| 0d 09 0d 09 4f 53 45 72 | 72 20 65 72 72 3b 0d 09 |....OSEr|r err;..|
|00001d00| 6c 6f 6e 67 20 72 65 6d | 6f 74 65 48 6f 73 74 3b |long rem|oteHost;|
|00001d10| 0d 09 73 68 6f 72 74 20 | 72 65 6d 6f 74 65 50 6f |..short |remotePo|
|00001d20| 72 74 3b 0d 09 6c 6f 6e | 67 20 69 6e 64 65 78 3b |rt;..lon|g index;|
|00001d30| 0d 09 75 6e 73 69 67 6e | 65 64 20 73 68 6f 72 74 |..unsign|ed short|
|00001d40| 20 73 65 6e 64 4c 65 6e | 3b 0d 09 0d 09 2f 2a 20 | sendLen|;..../* |
|00001d50| 77 61 69 74 20 66 6f 72 | 20 63 6f 6e 6e 65 63 74 |wait for| connect|
|00001d60| 20 74 6f 20 63 6f 6d 70 | 6c 65 74 65 20 2a 2f 0d | to comp|lete */.|
|00001d70| 09 0d 09 77 68 69 6c 65 | 20 28 70 42 6c 6f 63 6b |...while| (pBlock|
|00001d80| 2d 3e 69 6f 52 65 73 75 | 6c 74 20 3e 20 30 29 0d |->ioResu|lt > 0).|
|00001d90| 09 09 47 69 76 65 54 69 | 6d 65 28 63 53 6c 65 65 |..GiveTi|me(cSlee|
|00001da0| 70 54 69 6d 65 29 3b 0d | 09 09 09 0d 09 2f 2a 20 |pTime);.|...../* |
|00001db0| 67 65 74 20 63 6f 6d 70 | 6c 65 74 69 6f 6e 20 63 |get comp|letion c|
|00001dc0| 6f 64 65 20 66 72 6f 6d | 20 64 61 74 61 20 63 6f |ode from| data co|
|00001dd0| 6e 6e 65 63 74 69 6f 6e | 20 6f 70 65 6e 69 6e 67 |nnection| opening|
|00001de0| 20 2a 2f 0d 09 0d 09 65 | 72 72 20 3d 20 41 73 79 | */....e|rr = Asy|
|00001df0| 6e 63 47 65 74 43 6f 6e | 6e 65 63 74 69 6f 6e 44 |ncGetCon|nectionD|
|00001e00| 61 74 61 28 70 42 6c 6f | 63 6b 2c 26 72 65 6d 6f |ata(pBlo|ck,&remo|
|00001e10| 74 65 48 6f 73 74 2c 26 | 72 65 6d 6f 74 65 50 6f |teHost,&|remotePo|
|00001e20| 72 74 29 3b 0d 09 0d 09 | 69 66 20 28 65 72 72 20 |rt);....|if (err |
|00001e30| 3d 3d 20 6e 6f 45 72 72 | 29 20 7b 20 0d 09 09 41 |== noErr|) { ...A|
|00001e40| 64 64 43 52 4c 46 28 26 | 64 61 74 61 2c 26 73 69 |ddCRLF(&|data,&si|
|00001e50| 7a 65 29 3b 0d 09 09 69 | 6e 64 65 78 20 3d 20 30 |ze);...i|ndex = 0|
|00001e60| 3b 0d 09 09 77 68 69 6c | 65 20 28 69 6e 64 65 78 |;...whil|e (index|
|00001e70| 20 3c 20 73 69 7a 65 20 | 26 26 20 65 72 72 3d 3d | < size |&& err==|
|00001e80| 6e 6f 45 72 72 29 20 7b | 0d 09 09 09 73 65 6e 64 |noErr) {|....send|
|00001e90| 4c 65 6e 20 3d 20 28 75 | 6e 73 69 67 6e 65 64 20 |Len = (u|nsigned |
|00001ea0| 73 68 6f 72 74 29 63 53 | 65 6e 64 42 6c 6f 63 6b |short)cS|endBlock|
|00001eb0| 53 69 7a 65 3b 0d 09 09 | 09 69 66 20 28 28 69 6e |Size;...|.if ((in|
|00001ec0| 64 65 78 2b 28 75 6e 73 | 69 67 6e 65 64 20 6c 6f |dex+(uns|igned lo|
|00001ed0| 6e 67 29 73 65 6e 64 4c | 65 6e 29 20 3e 20 73 69 |ng)sendL|en) > si|
|00001ee0| 7a 65 29 0d 09 09 09 09 | 73 65 6e 64 4c 65 6e 20 |ze).....|sendLen |
|00001ef0| 3d 20 28 75 6e 73 69 67 | 6e 65 64 20 73 68 6f 72 |= (unsig|ned shor|
|00001f00| 74 29 73 69 7a 65 2d 28 | 75 6e 73 69 67 6e 65 64 |t)size-(|unsigned|
|00001f10| 20 73 68 6f 72 74 29 69 | 6e 64 65 78 3b 0d 09 09 | short)i|ndex;...|
|00001f20| 09 65 72 72 20 3d 20 53 | 65 6e 64 44 61 74 61 28 |.err = S|endData(|
|00001f30| 64 61 74 61 43 6f 6e 6e | 49 44 2c 64 61 74 61 2b |dataConn|ID,data+|
|00001f40| 69 6e 64 65 78 2c 73 65 | 6e 64 4c 65 6e 2c 66 61 |index,se|ndLen,fa|
|00001f50| 6c 73 65 29 3b 0d 09 09 | 09 69 6e 64 65 78 20 2b |lse);...|.index +|
|00001f60| 3d 20 63 53 65 6e 64 42 | 6c 6f 63 6b 53 69 7a 65 |= cSendB|lockSize|
|00001f70| 3b 0d 09 09 7d 0d 09 09 | 4d 79 44 69 73 70 6f 73 |;...}...|MyDispos|
|00001f80| 50 74 72 28 64 61 74 61 | 29 3b 0d 09 7d 0d 09 0d |Ptr(data|);..}...|
|00001f90| 09 72 65 74 75 72 6e 20 | 65 72 72 3b 0d 7d 0d 0d |.return |err;.}..|
|00001fa0| 0d 2f 2a 09 52 65 6d 6f | 76 65 44 61 74 61 53 74 |./*.Remo|veDataSt|
|00001fb0| 72 65 61 6d 20 69 73 20 | 63 61 6c 6c 65 64 20 6f |ream is |called o|
|00001fc0| 6e 63 65 20 61 20 64 61 | 74 61 20 74 72 61 6e 73 |nce a da|ta trans|
|00001fd0| 66 65 72 20 68 61 73 20 | 62 65 65 6e 20 63 6f 6d |fer has |been com|
|00001fe0| 70 6c 65 74 65 64 2e 0d | 09 49 74 20 73 68 75 74 |pleted..|.It shut|
|00001ff0| 73 20 64 6f 77 6e 20 74 | 68 65 20 73 65 63 6f 6e |s down t|he secon|
|00002000| 64 61 72 79 20 64 61 74 | 61 20 63 68 61 6e 6e 65 |dary dat|a channe|
|00002010| 6c 20 62 65 74 77 65 65 | 6e 20 74 68 65 20 63 6c |l betwee|n the cl|
|00002020| 69 65 6e 74 20 61 6e 64 | 0d 09 73 65 72 76 65 72 |ient and|..server|
|00002030| 20 77 68 69 63 68 20 77 | 61 73 20 75 73 65 64 20 | which w|as used |
|00002040| 73 6f 6c 65 6c 79 20 66 | 6f 72 20 6f 6e 65 20 64 |solely f|or one d|
|00002050| 61 74 61 20 74 72 61 6e | 73 66 65 72 2e 0d 2a 2f |ata tran|sfer..*/|
|00002060| 0d 0d 4f 53 45 72 72 20 | 52 65 6d 6f 76 65 44 61 |..OSErr |RemoveDa|
|00002070| 74 61 53 74 72 65 61 6d | 28 75 6e 73 69 67 6e 65 |taStream|(unsigne|
|00002080| 64 20 6c 6f 6e 67 20 64 | 61 74 61 43 6f 6e 6e 49 |d long d|ataConnI|
|00002090| 44 29 0d 7b 0d 09 4f 53 | 45 72 72 20 65 72 72 3b |D).{..OS|Err err;|
|000020a0| 0d 09 0d 09 43 6c 6f 73 | 65 43 6f 6e 6e 65 63 74 |....Clos|eConnect|
|000020b0| 69 6f 6e 28 64 61 74 61 | 43 6f 6e 6e 49 44 29 3b |ion(data|ConnID);|
|000020c0| 0d 09 65 72 72 20 3d 20 | 52 65 6c 65 61 73 65 53 |..err = |ReleaseS|
|000020d0| 74 72 65 61 6d 28 64 61 | 74 61 43 6f 6e 6e 49 44 |tream(da|taConnID|
|000020e0| 29 3b 0d 09 72 65 74 75 | 72 6e 20 65 72 72 3b 0d |);..retu|rn err;.|
|000020f0| 7d 0d 0d 0d 2f 2a 09 47 | 65 74 50 6f 72 74 4e 75 |}.../*.G|etPortNu|
|00002100| 6d 20 69 73 20 61 20 72 | 6f 75 74 69 6e 65 20 77 |m is a r|outine w|
|00002110| 68 69 63 68 20 70 69 63 | 6b 73 20 61 20 72 61 6e |hich pic|ks a ran|
|00002120| 64 6f 6d 20 70 6f 72 74 | 20 6e 75 6d 62 65 72 20 |dom port| number |
|00002130| 66 6f 72 20 75 73 65 20 | 69 6e 20 64 61 74 61 0d |for use |in data.|
|00002140| 09 74 72 61 6e 73 66 65 | 72 73 2e 0d 2a 2f 0d 0d |.transfe|rs..*/..|
|00002150| 74 63 70 5f 70 6f 72 74 | 20 47 65 74 50 6f 72 74 |tcp_port| GetPort|
|00002160| 4e 75 6d 28 76 6f 69 64 | 29 0d 7b 0d 09 72 65 74 |Num(void|).{..ret|
|00002170| 75 72 6e 20 28 34 30 30 | 30 30 20 2b 20 28 28 28 |urn (400|00 + (((|
|00002180| 75 6e 73 69 67 6e 65 64 | 20 6c 6f 6e 67 29 20 54 |unsigned| long) T|
|00002190| 69 63 6b 43 6f 75 6e 74 | 28 29 29 20 26 20 30 78 |ickCount|()) & 0x|
|000021a0| 33 66 66 66 29 29 3b 20 | 2f 2a 20 67 65 74 20 61 |3fff)); |/* get a|
|000021b0| 20 72 61 6e 64 6f 6d 20 | 70 6f 72 74 20 2a 2f 0d | random |port */.|
|000021c0| 7d 0d 0d 0d 2f 2a 09 53 | 65 6e 64 50 6f 72 74 43 |}.../*.S|endPortC|
|000021d0| 6f 6d 6d 20 69 73 20 63 | 61 6c 6c 65 64 20 74 6f |omm is c|alled to|
|000021e0| 20 73 65 6e 64 20 74 68 | 65 20 27 50 4f 52 54 27 | send th|e 'PORT'|
|000021f0| 20 63 6f 6d 6d 61 6e 64 | 2c 20 74 65 6c 6c 69 6e | command|, tellin|
|00002200| 67 20 74 68 65 20 73 65 | 72 76 65 72 20 77 68 69 |g the se|rver whi|
|00002210| 63 68 0d 09 70 6f 72 74 | 20 69 73 20 74 6f 20 62 |ch..port| is to b|
|00002220| 65 20 75 73 65 64 20 66 | 6f 72 20 74 68 65 20 74 |e used f|or the t|
|00002230| 72 61 6e 73 66 65 72 20 | 6f 66 20 64 61 74 61 20 |ransfer |of data |
|00002240| 62 65 74 77 65 65 6e 20 | 73 65 72 76 65 72 20 61 |between |server a|
|00002250| 6e 64 20 63 6c 69 65 6e | 74 2e 0d 2a 2f 0d 0d 4f |nd clien|t..*/..O|
|00002260| 53 45 72 72 20 53 65 6e | 64 50 6f 72 74 43 6f 6d |SErr Sen|dPortCom|
|00002270| 6d 28 75 6e 73 69 67 6e | 65 64 20 6c 6f 6e 67 20 |m(unsign|ed long |
|00002280| 64 61 74 61 43 6f 6e 6e | 49 44 2c 20 73 68 6f 72 |dataConn|ID, shor|
|00002290| 74 20 70 6f 72 74 4e 75 | 6d 29 0d 7b 0d 09 4f 53 |t portNu|m).{..OS|
|000022a0| 45 72 72 20 65 72 72 3b | 0d 09 50 74 72 20 72 65 |Err err;|..Ptr re|
|000022b0| 73 70 42 75 66 66 3b 0d | 09 75 6e 73 69 67 6e 65 |spBuff;.|.unsigne|
|000022c0| 64 20 73 68 6f 72 74 20 | 72 65 73 70 4c 65 6e 3b |d short |respLen;|
|000022d0| 0d 09 69 70 5f 61 64 64 | 72 20 6d 79 4e 65 74 4e |..ip_add|r myNetN|
|000022e0| 75 6d 3b 0d 09 63 68 61 | 72 20 63 6f 6d 6d 61 6e |um;..cha|r comman|
|000022f0| 64 53 74 72 5b 34 30 5d | 3b 0d 09 0d 09 69 66 20 |dStr[40]|;....if |
|00002300| 28 28 65 72 72 20 3d 20 | 47 65 74 4d 79 49 50 28 |((err = |GetMyIP(|
|00002310| 26 6d 79 4e 65 74 4e 75 | 6d 29 29 20 3d 3d 20 6e |&myNetNu|m)) == n|
|00002320| 6f 45 72 72 29 20 7b 0d | 09 09 73 70 72 69 6e 74 |oErr) {.|..sprint|
|00002330| 66 28 63 6f 6d 6d 61 6e | 64 53 74 72 2c 22 50 4f |f(comman|dStr,"PO|
|00002340| 52 54 20 25 6c 75 2c 25 | 6c 75 2c 25 6c 75 2c 25 |RT %lu,%|lu,%lu,%|
|00002350| 6c 75 2c 25 75 2c 25 75 | 22 2c 0d 09 09 09 28 20 |lu,%u,%u|",....( |
|00002360| 6d 79 4e 65 74 4e 75 6d | 20 3e 3e 20 32 34 29 2c |myNetNum| >> 24),|
|00002370| 09 09 09 09 09 2f 2a 20 | 63 6f 6e 76 65 72 74 73 |...../* |converts|
|00002380| 20 61 64 64 72 20 74 6f | 20 64 6f 74 20 6e 6f 74 | addr to| dot not|
|00002390| 61 74 69 6f 6e 20 2a 2f | 0d 09 09 09 28 28 6d 79 |ation */|....((my|
|000023a0| 4e 65 74 4e 75 6d 20 26 | 20 30 78 30 30 46 46 30 |NetNum &| 0x00FF0|
|000023b0| 30 30 30 29 20 3e 3e 20 | 31 36 29 2c 09 0d 09 09 |000) >> |16),....|
|000023c0| 09 28 28 6d 79 4e 65 74 | 4e 75 6d 20 26 20 30 78 |.((myNet|Num & 0x|
|000023d0| 30 30 30 30 46 46 30 30 | 29 20 3e 3e 20 38 29 2c |0000FF00|) >> 8),|
|000023e0| 0d 09 09 09 28 20 6d 79 | 4e 65 74 4e 75 6d 20 26 |....( my|NetNum &|
|000023f0| 20 30 78 30 30 30 30 30 | 30 46 46 29 2c 0d 09 09 | 0x00000|0FF),...|
|00002400| 09 28 20 70 6f 72 74 4e | 75 6d 20 3e 3e 20 38 29 |.( portN|um >> 8)|
|00002410| 2c 0d 09 09 09 28 20 70 | 6f 72 74 4e 75 6d 20 26 |,....( p|ortNum &|
|00002420| 20 30 78 30 30 46 46 29 | 29 3b 0d 09 09 73 74 72 | 0x00FF)|);...str|
|00002430| 63 61 74 28 63 6f 6d 6d | 61 6e 64 53 74 72 2c 43 |cat(comm|andStr,C|
|00002440| 52 4c 46 29 3b 0d 09 09 | 65 72 72 20 3d 20 53 65 |RLF);...|err = Se|
|00002450| 6e 64 43 6f 6d 6d 61 6e | 64 28 64 61 74 61 43 6f |ndComman|d(dataCo|
|00002460| 6e 6e 49 44 2c 63 6f 6d | 6d 61 6e 64 53 74 72 2c |nnID,com|mandStr,|
|00002470| 26 72 65 73 70 42 75 66 | 66 2c 26 72 65 73 70 4c |&respBuf|f,&respL|
|00002480| 65 6e 29 3b 0d 09 09 4d | 79 44 69 73 70 6f 73 50 |en);...M|yDisposP|
|00002490| 74 72 28 72 65 73 70 42 | 75 66 66 29 3b 0d 09 7d |tr(respB|uff);..}|
|000024a0| 0d 09 72 65 74 75 72 6e | 20 65 72 72 3b 0d 7d 0d |..return| err;.}.|
|000024b0| 0d 0d 2f 2a 09 46 54 50 | 54 65 78 74 4d 6f 64 65 |../*.FTP|TextMode|
|000024c0| 20 69 73 20 63 61 6c 6c | 65 64 20 74 6f 20 73 77 | is call|ed to sw|
|000024d0| 69 74 63 68 20 74 68 65 | 20 6d 6f 64 65 20 6f 66 |itch the| mode of|
|000024e0| 20 74 68 65 20 64 61 74 | 61 20 74 72 61 6e 73 66 | the dat|a transf|
|000024f0| 65 72 20 74 6f 20 74 65 | 78 74 20 6d 6f 64 65 2e |er to te|xt mode.|
|00002500| 0d 2a 2f 0d 0d 4f 53 45 | 72 72 20 46 54 50 54 65 |.*/..OSE|rr FTPTe|
|00002510| 78 74 4d 6f 64 65 28 75 | 6e 73 69 67 6e 65 64 20 |xtMode(u|nsigned |
|00002520| 6c 6f 6e 67 20 63 6f 6e | 6e 49 44 29 0d 7b 0d 09 |long con|nID).{..|
|00002530| 50 74 72 20 72 65 73 70 | 42 75 66 66 3b 0d 09 75 |Ptr resp|Buff;..u|
|00002540| 6e 73 69 67 6e 65 64 20 | 73 68 6f 72 74 20 72 65 |nsigned |short re|
|00002550| 73 70 4c 65 6e 3b 0d 09 | 4f 53 45 72 72 20 65 72 |spLen;..|OSErr er|
|00002560| 72 3b 0d 09 63 68 61 72 | 20 63 6f 6d 6d 61 6e 64 |r;..char| command|
|00002570| 53 74 72 5b 32 35 36 5d | 3b 0d 09 0d 09 73 74 72 |Str[256]|;....str|
|00002580| 63 70 79 28 63 6f 6d 6d | 61 6e 64 53 74 72 2c 22 |cpy(comm|andStr,"|
|00002590| 54 59 50 45 20 41 22 29 | 3b 0d 09 73 74 72 63 61 |TYPE A")|;..strca|
|000025a0| 74 28 63 6f 6d 6d 61 6e | 64 53 74 72 2c 43 52 4c |t(comman|dStr,CRL|
|000025b0| 46 29 3b 0d 09 0d 09 69 | 66 20 28 28 65 72 72 20 |F);....i|f ((err |
|000025c0| 3d 20 53 65 6e 64 43 6f | 6d 6d 61 6e 64 28 63 6f |= SendCo|mmand(co|
|000025d0| 6e 6e 49 44 2c 63 6f 6d | 6d 61 6e 64 53 74 72 2c |nnID,com|mandStr,|
|000025e0| 26 72 65 73 70 42 75 66 | 66 2c 26 72 65 73 70 4c |&respBuf|f,&respL|
|000025f0| 65 6e 29 29 20 3d 3d 20 | 6e 6f 45 72 72 29 20 7b |en)) == |noErr) {|
|00002600| 0d 09 09 65 72 72 20 3d | 20 28 73 74 72 6e 63 6d |...err =| (strncm|
|00002610| 70 28 28 63 68 61 72 20 | 2a 29 72 65 73 70 42 75 |p((char |*)respBu|
|00002620| 66 66 2c 22 32 30 30 22 | 2c 33 29 3d 3d 30 29 3b |ff,"200"|,3)==0);|
|00002630| 0d 09 7d 0d 09 4d 79 44 | 69 73 70 6f 73 50 74 72 |..}..MyD|isposPtr|
|00002640| 28 72 65 73 70 42 75 66 | 66 29 3b 0d 09 72 65 74 |(respBuf|f);..ret|
|00002650| 75 72 6e 20 65 72 72 3b | 0d 7d 0d 0d 0d 2f 2a 09 |urn err;|.}.../*.|
|00002660| 46 69 78 43 52 4c 46 20 | 72 65 6d 6f 76 65 73 20 |FixCRLF |removes |
|00002670| 74 68 65 20 4c 46 20 66 | 72 6f 6d 20 43 52 4c 46 |the LF f|rom CRLF|
|00002680| 20 70 61 69 72 73 20 72 | 65 63 65 69 76 65 64 20 | pairs r|eceived |
|00002690| 6f 6e 20 74 68 65 20 64 | 61 74 61 20 63 6f 6e 6e |on the d|ata conn|
|000026a0| 65 63 74 69 6f 6e 2e 0d | 2a 2f 0d 0d 76 6f 69 64 |ection..|*/..void|
|000026b0| 20 46 69 78 43 52 4c 46 | 28 63 68 61 72 20 2a 64 | FixCRLF|(char *d|
|000026c0| 61 74 61 2c 20 6c 6f 6e | 67 20 2a 6c 65 6e 67 74 |ata, lon|g *lengt|
|000026d0| 68 29 0d 7b 0d 09 72 65 | 67 69 73 74 65 72 20 63 |h).{..re|gister c|
|000026e0| 68 61 72 20 2a 73 6f 75 | 72 63 65 2c 2a 64 65 73 |har *sou|rce,*des|
|000026f0| 74 3b 0d 09 0d 09 69 66 | 20 28 2a 6c 65 6e 67 74 |t;....if| (*lengt|
|00002700| 68 20 3e 20 30 29 20 7b | 0d 09 09 73 6f 75 72 63 |h > 0) {|...sourc|
|00002710| 65 20 3d 20 64 65 73 74 | 20 3d 20 64 61 74 61 3b |e = dest| = data;|
|00002720| 0d 09 09 77 68 69 6c 65 | 20 28 28 73 6f 75 72 63 |...while| ((sourc|
|00002730| 65 20 2d 20 64 61 74 61 | 29 20 3c 20 28 2a 6c 65 |e - data|) < (*le|
|00002740| 6e 67 74 68 2d 31 29 29 | 20 7b 0d 09 09 09 69 66 |ngth-1))| {....if|
|00002750| 20 28 2a 73 6f 75 72 63 | 65 20 3d 3d 20 4c 46 29 | (*sourc|e == LF)|
|00002760| 0d 09 09 09 09 73 6f 75 | 72 63 65 2b 2b 3b 0d 09 |.....sou|rce++;..|
|00002770| 09 09 2a 64 65 73 74 2b | 2b 20 3d 20 2a 73 6f 75 |..*dest+|+ = *sou|
|00002780| 72 63 65 2b 2b 3b 0d 09 | 09 7d 0d 09 09 69 66 20 |rce++;..|.}...if |
|00002790| 28 2a 73 6f 75 72 63 65 | 20 21 3d 20 4c 46 20 26 |(*source| != LF &|
|000027a0| 26 20 28 73 6f 75 72 63 | 65 20 2d 20 64 61 74 61 |& (sourc|e - data|
|000027b0| 29 20 3c 20 2a 6c 65 6e | 67 74 68 29 0d 09 09 09 |) < *len|gth)....|
|000027c0| 2a 64 65 73 74 2b 2b 20 | 3d 20 2a 73 6f 75 72 63 |*dest++ |= *sourc|
|000027d0| 65 2b 2b 3b 0d 09 09 2a | 6c 65 6e 67 74 68 20 3d |e++;...*|length =|
|000027e0| 20 64 65 73 74 20 2d 20 | 64 61 74 61 3b 0d 09 7d | dest - |data;..}|
|000027f0| 0d 7d 0d 0d 0d 2f 2a 09 | 41 64 64 43 52 4c 46 20 |.}.../*.|AddCRLF |
|00002800| 61 64 64 73 20 61 20 4c | 46 20 74 6f 20 65 61 63 |adds a L|F to eac|
|00002810| 68 20 43 52 20 66 6f 72 | 20 64 61 74 61 20 74 6f |h CR for| data to|
|00002820| 20 62 65 20 73 65 6e 74 | 20 74 6f 20 74 68 65 20 | be sent| to the |
|00002830| 72 65 6d 6f 74 65 20 68 | 6f 73 74 0d 09 69 6e 20 |remote h|ost..in |
|00002840| 74 65 78 74 20 28 61 73 | 63 69 69 29 20 6d 6f 64 |text (as|cii) mod|
|00002850| 65 2e 0d 2a 2f 0d 0d 76 | 6f 69 64 20 41 64 64 43 |e..*/..v|oid AddC|
|00002860| 52 4c 46 28 63 68 61 72 | 20 2a 2a 64 61 74 61 2c |RLF(char| **data,|
|00002870| 20 6c 6f 6e 67 20 2a 6c | 65 6e 67 74 68 29 0d 7b | long *l|ength).{|
|00002880| 0d 09 72 65 67 69 73 74 | 65 72 20 63 68 61 72 20 |..regist|er char |
|00002890| 2a 63 75 72 4f 6c 64 2c | 2a 63 75 72 4e 65 77 2c |*curOld,|*curNew,|
|000028a0| 2a 6e 65 77 44 61 74 61 | 3b 0d 09 0d 09 6e 65 77 |*newData|;....new|
|000028b0| 44 61 74 61 20 3d 20 63 | 75 72 4e 65 77 20 3d 20 |Data = c|urNew = |
|000028c0| 4d 79 4e 65 77 50 74 72 | 28 28 75 6e 73 69 67 6e |MyNewPtr|((unsign|
|000028d0| 65 64 20 6c 6f 6e 67 29 | 63 53 65 6e 64 42 6c 6f |ed long)|cSendBlo|
|000028e0| 63 6b 53 69 7a 65 2a 32 | 29 3b 0d 09 69 66 20 28 |ckSize*2|);..if (|
|000028f0| 4d 79 4d 65 6d 45 72 72 | 28 29 20 21 3d 20 6e 6f |MyMemErr|() != no|
|00002900| 45 72 72 29 0d 09 09 72 | 65 74 75 72 6e 3b 0d 09 |Err)...r|eturn;..|
|00002910| 09 0d 09 63 75 72 4f 6c | 64 20 3d 20 2a 64 61 74 |...curOl|d = *dat|
|00002920| 61 3b 0d 0d 09 69 66 20 | 28 2a 63 75 72 4f 6c 64 |a;...if |(*curOld|
|00002930| 20 3d 3d 20 4c 46 29 0d | 09 09 63 75 72 4f 6c 64 | == LF).|..curOld|
|00002940| 2b 2b 3b 0d 0d 09 77 68 | 69 6c 65 20 28 20 28 63 |++;...wh|ile ( (c|
|00002950| 75 72 4f 6c 64 2d 2a 64 | 61 74 61 29 20 3c 20 2a |urOld-*d|ata) < *|
|00002960| 6c 65 6e 67 74 68 20 29 | 20 7b 0d 09 09 2a 63 75 |length )| {...*cu|
|00002970| 72 4e 65 77 2b 2b 20 3d | 20 2a 63 75 72 4f 6c 64 |rNew++ =| *curOld|
|00002980| 2b 2b 3b 0d 09 09 69 66 | 20 28 2a 28 63 75 72 4f |++;...if| (*(curO|
|00002990| 6c 64 2d 31 29 20 3d 3d | 20 43 52 20 26 26 20 2a |ld-1) ==| CR && *|
|000029a0| 63 75 72 4f 6c 64 20 21 | 3d 20 4c 46 29 0d 09 09 |curOld !|= LF)...|
|000029b0| 09 2a 63 75 72 4e 65 77 | 2b 2b 20 3d 20 4c 46 3b |.*curNew|++ = LF;|
|000029c0| 0d 09 7d 0d 0d 09 2a 6c | 65 6e 67 74 68 20 3d 20 |..}...*l|ength = |
|000029d0| 63 75 72 4e 65 77 2d 6e | 65 77 44 61 74 61 3b 0d |curNew-n|ewData;.|
|000029e0| 09 4d 79 44 69 73 70 6f | 73 50 74 72 28 2a 64 61 |.MyDispo|sPtr(*da|
|000029f0| 74 61 29 3b 0d 09 2a 64 | 61 74 61 20 3d 20 6e 65 |ta);..*d|ata = ne|
|00002a00| 77 44 61 74 61 3b 0d 7d | 0d 0d 0d 2f 2a 2d 2d 2d |wData;.}|.../*---|
|00002a10| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a20| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a30| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00002a40| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2a 2f 0d 0d 0d 2f 2a |--------|-*/.../*|
|00002a50| 09 46 54 50 49 6e 69 74 | 09 69 73 20 63 61 6c 6c |.FTPInit|.is call|
|00002a60| 65 64 20 74 6f 20 69 6e | 69 74 69 61 6c 69 7a 65 |ed to in|itialize|
|00002a70| 20 74 68 65 20 6e 65 63 | 65 73 73 61 72 79 20 64 | the nec|essary d|
|00002a80| 72 69 76 65 72 73 20 66 | 6f 72 20 46 54 50 20 63 |rivers f|or FTP c|
|00002a90| 6f 6e 6e 65 63 74 69 6f | 6e 73 2e 0d 09 49 6e 20 |onnectio|ns...In |
|00002aa0| 61 64 64 69 74 69 6f 6e | 2c 20 69 74 20 72 65 67 |addition|, it reg|
|00002ab0| 69 73 74 65 72 73 20 61 | 20 63 61 6c 6c 62 61 63 |isters a| callbac|
|00002ac0| 6b 20 72 6f 75 74 69 6e | 65 20 66 6f 72 20 73 74 |k routin|e for st|
|00002ad0| 61 74 75 73 20 6d 65 73 | 73 61 67 65 73 2e 0d 2a |atus mes|sages..*|
|00002ae0| 2f 0d 0d 4f 53 45 72 72 | 20 46 54 50 49 6e 69 74 |/..OSErr| FTPInit|
|00002af0| 28 50 72 6f 63 50 74 72 | 20 73 74 61 74 75 73 70 |(ProcPtr| statusp|
|00002b00| 72 6f 63 29 0d 7b 0d 09 | 67 53 74 61 74 75 73 50 |roc).{..|gStatusP|
|00002b10| 72 6f 63 20 3d 20 73 74 | 61 74 75 73 70 72 6f 63 |roc = st|atusproc|
|00002b20| 3b 0d 09 72 65 74 75 72 | 6e 20 49 6e 69 74 4e 65 |;..retur|n InitNe|
|00002b30| 74 77 6f 72 6b 28 29 3b | 0d 7d 0d 0d 0d 2f 2a 09 |twork();|.}.../*.|
|00002b40| 46 54 50 46 69 6e 69 73 | 68 20 69 73 20 63 61 6c |FTPFinis|h is cal|
|00002b50| 6c 65 64 20 77 68 65 6e | 20 61 6c 6c 20 46 54 50 |led when| all FTP|
|00002b60| 20 74 72 61 6e 73 61 63 | 74 69 6f 6e 73 20 68 61 | transac|tions ha|
|00002b70| 76 65 20 62 65 65 6e 20 | 63 6f 6d 70 6c 65 74 65 |ve been |complete|
|00002b80| 64 2e 0d 09 49 6e 20 74 | 68 69 73 20 69 6d 70 6c |d...In t|his impl|
|00002b90| 65 6d 65 6e 74 61 74 69 | 6f 6e 2c 20 74 68 65 20 |ementati|on, the |
|00002ba0| 72 6f 75 74 69 6e 65 20 | 61 63 74 75 61 6c 6c 79 |routine |actually|
|00002bb0| 20 64 6f 65 73 20 6e 6f | 74 68 69 6e 67 2e 0d 2a | does no|thing..*|
|00002bc0| 2f 0d 0d 4f 53 45 72 72 | 20 46 54 50 46 69 6e 69 |/..OSErr| FTPFini|
|00002bd0| 73 68 28 76 6f 69 64 29 | 0d 7b 0d 09 72 65 74 75 |sh(void)|.{..retu|
|00002be0| 72 6e 20 6e 6f 45 72 72 | 3b 0d 7d 0d 0d 0d 2f 2a |rn noErr|;.}.../*|
|00002bf0| 09 46 54 50 43 6f 6e 6e | 65 63 74 20 73 65 74 73 |.FTPConn|ect sets|
|00002c00| 20 75 70 20 61 6e 20 46 | 54 50 20 63 6f 6e 74 72 | up an F|TP contr|
|00002c10| 6f 6c 20 63 6f 6e 6e 65 | 63 74 69 6f 6e 20 62 65 |ol conne|ction be|
|00002c20| 74 77 65 65 6e 20 74 68 | 65 20 6c 6f 63 61 6c 20 |tween th|e local |
|00002c30| 6d 61 63 68 69 6e 65 0d | 09 61 6e 64 20 61 20 72 |machine.|.and a r|
|00002c40| 65 6d 6f 74 65 20 46 54 | 50 20 73 65 72 76 65 72 |emote FT|P server|
|00002c50| 2e 0d 2a 2f 0d 0d 4f 53 | 45 72 72 20 46 54 50 43 |..*/..OS|Err FTPC|
|00002c60| 6f 6e 6e 65 63 74 28 75 | 6e 73 69 67 6e 65 64 20 |onnect(u|nsigned |
|00002c70| 6c 6f 6e 67 20 2a 63 6f | 6e 6e 49 44 2c 63 68 61 |long *co|nnID,cha|
|00002c80| 72 20 2a 61 64 64 72 65 | 73 73 2c 63 68 61 72 20 |r *addre|ss,char |
|00002c90| 2a 75 73 65 72 49 44 2c | 63 68 61 72 20 2a 70 61 |*userID,|char *pa|
|00002ca0| 73 73 77 6f 72 64 29 0d | 7b 0d 09 69 70 5f 61 64 |ssword).|{..ip_ad|
|00002cb0| 64 72 09 63 6f 6e 6e 41 | 64 64 72 3b 0d 09 74 63 |dr.connA|ddr;..tc|
|00002cc0| 70 5f 70 6f 72 74 20 6c | 50 6f 72 74 20 3d 20 30 |p_port l|Port = 0|
|00002cd0| 3b 0d 09 4f 53 45 72 72 | 09 65 72 72 20 3d 20 63 |;..OSErr|.err = c|
|00002ce0| 49 6e 76 61 6c 69 64 48 | 6f 73 74 3b 0d 09 09 09 |InvalidH|ost;....|
|00002cf0| 0d 09 69 66 09 28 28 28 | 65 72 72 20 3d 20 43 6f |..if.(((|err = Co|
|00002d00| 6e 76 65 72 74 53 74 72 | 69 6e 67 54 6f 41 64 64 |nvertStr|ingToAdd|
|00002d10| 72 28 61 64 64 72 65 73 | 73 2c 26 63 6f 6e 6e 41 |r(addres|s,&connA|
|00002d20| 64 64 72 29 29 20 3d 3d | 20 6e 6f 45 72 72 29 20 |ddr)) ==| noErr) |
|00002d30| 26 26 0d 09 09 20 28 28 | 65 72 72 20 3d 20 43 72 |&&... ((|err = Cr|
|00002d40| 65 61 74 65 53 74 72 65 | 61 6d 28 63 6f 6e 6e 49 |eateStre|am(connI|
|00002d50| 44 2c 63 52 42 75 66 4c | 65 6e 29 29 20 3d 3d 20 |D,cRBufL|en)) == |
|00002d60| 6e 6f 45 72 72 29 29 20 | 7b 0d 09 09 09 69 66 20 |noErr)) |{....if |
|00002d70| 28 28 28 65 72 72 20 3d | 20 4f 70 65 6e 43 6f 6e |(((err =| OpenCon|
|00002d80| 6e 65 63 74 69 6f 6e 28 | 2a 63 6f 6e 6e 49 44 2c |nection(|*connID,|
|00002d90| 63 6f 6e 6e 41 64 64 72 | 2c 63 43 6f 6e 74 72 6f |connAddr|,cContro|
|00002da0| 6c 50 6f 72 74 2c 6b 43 | 6f 6e 6e 65 63 74 69 6f |lPort,kC|onnectio|
|00002db0| 6e 54 69 6d 65 4f 75 74 | 29 29 20 3d 3d 20 6e 6f |nTimeOut|)) == no|
|00002dc0| 45 72 72 29 20 26 26 0d | 09 09 09 09 28 28 65 72 |Err) &&.|....((er|
|00002dd0| 72 20 3d 20 53 61 79 48 | 65 6c 6c 6f 28 2a 63 6f |r = SayH|ello(*co|
|00002de0| 6e 6e 49 44 29 29 20 3d | 3d 20 6e 6f 45 72 72 29 |nnID)) =|= noErr)|
|00002df0| 29 0d 09 09 09 09 09 65 | 72 72 20 3d 20 55 73 65 |)......e|rr = Use|
|00002e00| 72 41 75 74 68 28 2a 63 | 6f 6e 6e 49 44 2c 75 73 |rAuth(*c|onnID,us|
|00002e10| 65 72 49 44 2c 70 61 73 | 73 77 6f 72 64 29 3b 0d |erID,pas|sword);.|
|00002e20| 09 09 09 69 66 20 28 65 | 72 72 20 21 3d 20 6e 6f |...if (e|rr != no|
|00002e30| 45 72 72 29 0d 09 09 09 | 09 46 54 50 44 69 73 63 |Err)....|.FTPDisc|
|00002e40| 6f 6e 6e 65 63 74 28 2a | 63 6f 6e 6e 49 44 29 3b |onnect(*|connID);|
|00002e50| 0d 09 7d 0d 09 72 65 74 | 75 72 6e 20 65 72 72 3b |..}..ret|urn err;|
|00002e60| 0d 7d 0d 0d 0d 2f 2a 09 | 46 54 50 44 69 73 63 6f |.}.../*.|FTPDisco|
|00002e70| 6e 6e 65 63 74 20 73 68 | 75 74 73 20 64 6f 77 6e |nnect sh|uts down|
|00002e80| 20 61 6e 20 46 54 50 20 | 63 6f 6e 6e 65 63 74 69 | an FTP |connecti|
|00002e90| 6f 6e 20 77 68 69 63 68 | 20 77 61 73 20 6f 70 65 |on which| was ope|
|00002ea0| 6e 65 64 20 75 73 69 6e | 67 20 46 54 50 43 6f 6e |ned usin|g FTPCon|
|00002eb0| 6e 65 63 74 2e 0d 2a 2f | 0d 0d 4f 53 45 72 72 20 |nect..*/|..OSErr |
|00002ec0| 46 54 50 44 69 73 63 6f | 6e 6e 65 63 74 28 75 6e |FTPDisco|nnect(un|
|00002ed0| 73 69 67 6e 65 64 20 6c | 6f 6e 67 20 63 6f 6e 6e |signed l|ong conn|
|00002ee0| 49 44 29 0d 7b 0d 09 4f | 53 45 72 72 20 65 72 72 |ID).{..O|SErr err|
|00002ef0| 3b 0d 09 50 74 72 20 72 | 65 63 76 50 74 72 3b 0d |;..Ptr r|ecvPtr;.|
|00002f00| 09 75 6e 73 69 67 6e 65 | 64 20 73 68 6f 72 74 20 |.unsigne|d short |
|00002f10| 72 65 73 70 4c 65 6e 3b | 0d 09 63 68 61 72 20 63 |respLen;|..char c|
|00002f20| 6f 6d 6d 61 6e 64 53 74 | 72 5b 32 35 36 5d 3b 0d |ommandSt|r[256];.|
|00002f30| 09 0d 09 73 74 72 63 70 | 79 28 63 6f 6d 6d 61 6e |...strcp|y(comman|
|00002f40| 64 53 74 72 2c 22 51 55 | 49 54 22 29 3b 0d 09 73 |dStr,"QU|IT");..s|
|00002f50| 74 72 63 61 74 28 63 6f | 6d 6d 61 6e 64 53 74 72 |trcat(co|mmandStr|
|00002f60| 2c 43 52 4c 46 29 3b 0d | 09 53 65 6e 64 43 6f 6d |,CRLF);.|.SendCom|
|00002f70| 6d 61 6e 64 28 63 6f 6e | 6e 49 44 2c 63 6f 6d 6d |mand(con|nID,comm|
|00002f80| 61 6e 64 53 74 72 2c 26 | 72 65 63 76 50 74 72 2c |andStr,&|recvPtr,|
|00002f90| 26 72 65 73 70 4c 65 6e | 29 3b 0d 09 4d 79 44 69 |&respLen|);..MyDi|
|00002fa0| 73 70 6f 73 50 74 72 28 | 72 65 63 76 50 74 72 29 |sposPtr(|recvPtr)|
|00002fb0| 3b 0d 09 0d 09 43 6c 6f | 73 65 43 6f 6e 6e 65 63 |;....Clo|seConnec|
|00002fc0| 74 69 6f 6e 28 63 6f 6e | 6e 49 44 29 3b 0d 09 65 |tion(con|nID);..e|
|00002fd0| 72 72 20 3d 20 52 65 6c | 65 61 73 65 53 74 72 65 |rr = Rel|easeStre|
|00002fe0| 61 6d 28 63 6f 6e 6e 49 | 44 29 3b 0d 09 72 65 74 |am(connI|D);..ret|
|00002ff0| 75 72 6e 20 65 72 72 3b | 0d 7d 0d 0d 0d 2f 2a 09 |urn err;|.}.../*.|
|00003000| 46 54 50 56 69 65 77 46 | 69 6c 65 20 69 73 20 63 |FTPViewF|ile is c|
|00003010| 61 6c 6c 65 64 20 74 6f | 20 67 65 74 20 61 20 74 |alled to| get a t|
|00003020| 65 78 74 2d 6d 6f 64 65 | 20 66 69 6c 65 20 66 72 |ext-mode| file fr|
|00003030| 6f 6d 20 61 20 72 65 6d | 6f 74 65 20 6d 61 63 68 |om a rem|ote mach|
|00003040| 69 6e 65 0d 09 61 6e 64 | 20 73 74 6f 72 65 20 74 |ine..and| store t|
|00003050| 68 65 20 63 6f 6e 74 65 | 6e 74 73 20 6f 66 20 74 |he conte|nts of t|
|00003060| 68 65 20 66 69 6c 65 20 | 69 6e 20 61 20 70 6f 69 |he file |in a poi|
|00003070| 6e 74 65 72 20 61 6c 6c | 6f 63 61 74 65 64 20 77 |nter all|ocated w|
|00003080| 69 74 68 69 6e 0d 09 74 | 68 65 20 63 61 6c 6c 2e |ithin..t|he call.|
|00003090| 0d 2a 2f 0d 0d 4f 53 45 | 72 72 20 46 54 50 56 69 |.*/..OSE|rr FTPVi|
|000030a0| 65 77 46 69 6c 65 28 75 | 6e 73 69 67 6e 65 64 20 |ewFile(u|nsigned |
|000030b0| 6c 6f 6e 67 20 63 6f 6e | 6e 49 44 2c 50 74 72 20 |long con|nID,Ptr |
|000030c0| 2a 66 69 6c 65 2c 63 68 | 61 72 20 2a 66 69 6c 65 |*file,ch|ar *file|
|000030d0| 4e 61 6d 65 29 0d 7b 0d | 09 4f 53 45 72 72 09 65 |Name).{.|.OSErr.e|
|000030e0| 72 72 20 3d 20 6e 6f 45 | 72 72 3b 0d 09 75 6e 73 |rr = noE|rr;..uns|
|000030f0| 69 67 6e 65 64 20 6c 6f | 6e 67 20 64 61 74 61 43 |igned lo|ng dataC|
|00003100| 6f 6e 6e 49 44 3b 0d 09 | 50 74 72 20 72 65 73 70 |onnID;..|Ptr resp|
|00003110| 42 75 66 66 2c 64 61 74 | 61 50 74 72 3b 0d 09 75 |Buff,dat|aPtr;..u|
|00003120| 6e 73 69 67 6e 65 64 20 | 73 68 6f 72 74 20 72 65 |nsigned |short re|
|00003130| 73 70 4c 65 6e 3b 0d 09 | 73 68 6f 72 74 20 64 61 |spLen;..|short da|
|00003140| 74 61 50 6f 72 74 3b 0d | 09 75 6e 73 69 67 6e 65 |taPort;.|.unsigne|
|00003150| 64 20 73 68 6f 72 74 20 | 64 61 74 61 4c 65 6e 20 |d short |dataLen |
|00003160| 3d 20 63 44 61 74 61 4c | 65 6e 3b 0d 09 63 68 61 |= cDataL|en;..cha|
|00003170| 72 20 2a 63 6f 6d 6d 61 | 6e 64 3b 0d 09 54 43 50 |r *comma|nd;..TCP|
|00003180| 69 6f 70 62 20 2a 70 42 | 6c 6f 63 6b 3b 0d 09 63 |iopb *pB|lock;..c|
|00003190| 68 61 72 20 63 6f 6d 70 | 53 74 72 5b 32 35 36 5d |har comp|Str[256]|
|000031a0| 3b 0d 09 0d 09 73 74 72 | 63 70 79 28 63 6f 6d 70 |;....str|cpy(comp|
|000031b0| 53 74 72 2c 43 52 4c 46 | 29 3b 0d 09 73 74 72 63 |Str,CRLF|);..strc|
|000031c0| 61 74 28 63 6f 6d 70 53 | 74 72 2c 22 32 32 36 22 |at(compS|tr,"226"|
|000031d0| 29 3b 0d 09 0d 09 47 69 | 76 65 54 69 6d 65 28 63 |);....Gi|veTime(c|
|000031e0| 53 6c 65 65 70 54 69 6d | 65 29 3b 0d 09 0d 09 63 |SleepTim|e);....c|
|000031f0| 6f 6d 6d 61 6e 64 20 3d | 20 4d 79 4e 65 77 50 74 |ommand =| MyNewPt|
|00003200| 72 28 32 35 36 29 3b 0d | 09 69 66 20 28 4d 79 4d |r(256);.|.if (MyM|
|00003210| 65 6d 45 72 72 28 29 20 | 21 3d 20 6e 6f 45 72 72 |emErr() |!= noErr|
|00003220| 29 0d 09 09 72 65 74 75 | 72 6e 20 4d 79 4d 65 6d |)...retu|rn MyMem|
|00003230| 45 72 72 28 29 3b 0d 09 | 73 74 72 63 70 79 28 63 |Err();..|strcpy(c|
|00003240| 6f 6d 6d 61 6e 64 2c 22 | 52 45 54 52 20 22 29 3b |ommand,"|RETR ");|
|00003250| 0d 09 73 74 72 63 61 74 | 28 63 6f 6d 6d 61 6e 64 |..strcat|(command|
|00003260| 2c 66 69 6c 65 4e 61 6d | 65 29 3b 0d 09 73 74 72 |,fileNam|e);..str|
|00003270| 63 61 74 28 63 6f 6d 6d | 61 6e 64 2c 43 52 4c 46 |cat(comm|and,CRLF|
|00003280| 29 3b 0d 0d 09 46 54 50 | 54 65 78 74 4d 6f 64 65 |);...FTP|TextMode|
|00003290| 28 63 6f 6e 6e 49 44 29 | 3b 0d 09 64 61 74 61 50 |(connID)|;..dataP|
|000032a0| 6f 72 74 20 3d 20 47 65 | 74 50 6f 72 74 4e 75 6d |ort = Ge|tPortNum|
|000032b0| 28 29 3b 0d 09 53 74 61 | 74 75 73 57 69 6e 64 6f |();..Sta|tusWindo|
|000032c0| 77 28 22 4f 70 65 6e 69 | 6e 67 20 44 61 74 61 20 |w("Openi|ng Data |
|000032d0| 43 6f 6e 6e 65 63 74 69 | 6f 6e 2e 2e 2e 22 2c 2d |Connecti|on...",-|
|000032e0| 31 29 3b 0d 09 47 69 76 | 65 54 69 6d 65 28 30 29 |1);..Giv|eTime(0)|
|000032f0| 3b 0d 09 4d 61 6b 65 44 | 61 74 61 53 74 72 65 61 |;..MakeD|ataStrea|
|00003300| 6d 28 26 64 61 74 61 43 | 6f 6e 6e 49 44 2c 64 61 |m(&dataC|onnID,da|
|00003310| 74 61 50 6f 72 74 2c 26 | 70 42 6c 6f 63 6b 29 3b |taPort,&|pBlock);|
|00003320| 0d 09 53 74 61 74 75 73 | 57 69 6e 64 6f 77 28 22 |..Status|Window("|
|00003330| 53 65 6e 64 69 6e 67 20 | 50 4f 52 54 20 43 6f 6d |Sending |PORT Com|
|00003340| 6d 61 6e 64 2e 2e 2e 22 | 2c 2d 31 29 3b 0d 09 47 |mand..."|,-1);..G|
|00003350| 69 76 65 54 69 6d 65 28 | 30 29 3b 0d 09 69 66 20 |iveTime(|0);..if |
|00003360| 28 28 65 72 72 20 3d 20 | 53 65 6e 64 50 6f 72 74 |((err = |SendPort|
|00003370| 43 6f 6d 6d 28 63 6f 6e | 6e 49 44 2c 64 61 74 61 |Comm(con|nID,data|
|00003380| 50 6f 72 74 29 29 20 3d | 3d 20 6e 6f 45 72 72 29 |Port)) =|= noErr)|
|00003390| 20 7b 0d 09 09 53 74 61 | 74 75 73 57 69 6e 64 6f | {...Sta|tusWindo|
|000033a0| 77 28 22 52 65 71 75 65 | 73 74 69 6e 67 20 46 69 |w("Reque|sting Fi|
|000033b0| 6c 65 2e 2e 2e 22 2c 2d | 31 29 3b 0d 09 09 47 69 |le...",-|1);...Gi|
|000033c0| 76 65 54 69 6d 65 28 30 | 29 3b 0d 09 09 69 66 20 |veTime(0|);...if |
|000033d0| 28 28 28 65 72 72 20 3d | 20 53 65 6e 64 43 6f 6d |(((err =| SendCom|
|000033e0| 6d 61 6e 64 28 63 6f 6e | 6e 49 44 2c 63 6f 6d 6d |mand(con|nID,comm|
|000033f0| 61 6e 64 2c 26 72 65 73 | 70 42 75 66 66 2c 26 72 |and,&res|pBuff,&r|
|00003400| 65 73 70 4c 65 6e 29 29 | 20 3d 3d 20 6e 6f 45 72 |espLen))| == noEr|
|00003410| 72 29 20 26 26 0d 09 09 | 09 28 28 65 72 72 20 3d |r) &&...|.((err =|
|00003420| 20 28 73 74 72 6e 63 6d | 70 28 28 63 68 61 72 20 | (strncm|p((char |
|00003430| 2a 29 72 65 73 70 42 75 | 66 66 2c 22 31 35 30 22 |*)respBu|ff,"150"|
|00003440| 2c 33 29 3d 3d 30 29 20 | 3f 20 6e 6f 45 72 72 20 |,3)==0) |? noErr |
|00003450| 3a 20 63 4e 6f 74 43 6f | 6d 70 45 72 72 29 20 3d |: cNotCo|mpErr) =|
|00003460| 3d 20 6e 6f 45 72 72 29 | 20 26 26 0d 09 09 09 28 |= noErr)| &&....(|
|00003470| 53 74 61 74 75 73 57 69 | 6e 64 6f 77 28 22 52 65 |StatusWi|ndow("Re|
|00003480| 63 65 69 76 69 6e 67 20 | 46 69 6c 65 2e 2e 2e 22 |ceiving |File..."|
|00003490| 2c 2d 31 29 29 20 26 26 | 0d 09 09 09 28 28 65 72 |,-1)) &&|....((er|
|000034a0| 72 20 3d 20 47 65 74 44 | 69 72 65 63 74 44 61 74 |r = GetD|irectDat|
|000034b0| 61 28 64 61 74 61 43 6f | 6e 6e 49 44 2c 66 69 6c |a(dataCo|nnID,fil|
|000034c0| 65 2c 70 42 6c 6f 63 6b | 29 29 20 3d 3d 20 6e 6f |e,pBlock|)) == no|
|000034d0| 45 72 72 29 29 20 7b 0d | 09 09 09 09 69 66 20 28 |Err)) {.|....if (|
|000034e0| 21 28 73 74 72 73 74 72 | 28 72 65 73 70 42 75 66 |!(strstr|(respBuf|
|000034f0| 66 2c 63 6f 6d 70 53 74 | 72 29 29 29 20 7b 0d 09 |f,compSt|r))) {..|
|00003500| 09 09 09 09 64 61 74 61 | 50 74 72 20 3d 20 4d 79 |....data|Ptr = My|
|00003510| 4e 65 77 50 74 72 28 28 | 75 6e 73 69 67 6e 65 64 |NewPtr((|unsigned|
|00003520| 20 6c 6f 6e 67 29 63 44 | 61 74 61 4c 65 6e 29 3b | long)cD|ataLen);|
|00003530| 0d 09 09 09 09 09 69 66 | 20 28 4d 79 4d 65 6d 45 |......if| (MyMemE|
|00003540| 72 72 28 29 20 3d 3d 20 | 6e 6f 45 72 72 29 20 7b |rr() == |noErr) {|
|00003550| 0d 09 09 09 09 09 09 65 | 72 72 20 3d 20 52 65 63 |.......e|rr = Rec|
|00003560| 76 44 61 74 61 28 63 6f | 6e 6e 49 44 2c 64 61 74 |vData(co|nnID,dat|
|00003570| 61 50 74 72 2c 26 64 61 | 74 61 4c 65 6e 2c 66 61 |aPtr,&da|taLen,fa|
|00003580| 6c 73 65 29 3b 0d 09 09 | 09 09 09 09 4d 79 44 69 |lse);...|....MyDi|
|00003590| 73 70 6f 73 50 74 72 28 | 64 61 74 61 50 74 72 29 |sposPtr(|dataPtr)|
|000035a0| 3b 0d 09 09 09 09 09 7d | 0d 09 09 09 09 09 65 6c |;......}|......el|
|000035b0| 73 65 20 65 72 72 20 3d | 20 4d 79 4d 65 6d 45 72 |se err =| MyMemEr|
|000035c0| 72 28 29 3b 0d 09 09 09 | 09 7d 0d 09 09 09 7d 0d |r();....|.}....}.|
|000035d0| 09 09 4d 79 44 69 73 70 | 6f 73 50 74 72 28 72 65 |..MyDisp|osPtr(re|
|000035e0| 73 70 42 75 66 66 29 3b | 0d 09 7d 0d 09 52 65 6d |spBuff);|..}..Rem|
|000035f0| 6f 76 65 44 61 74 61 53 | 74 72 65 61 6d 28 64 61 |oveDataS|tream(da|
|00003600| 74 61 43 6f 6e 6e 49 44 | 29 3b 0d 09 4d 79 44 69 |taConnID|);..MyDi|
|00003610| 73 70 6f 73 50 74 72 28 | 63 6f 6d 6d 61 6e 64 29 |sposPtr(|command)|
|00003620| 3b 0d 09 72 65 74 75 72 | 6e 20 65 72 72 3b 0d 7d |;..retur|n err;.}|
|00003630| 0d 0d 0d 2f 2a 09 46 54 | 50 50 75 74 46 69 6c 65 |.../*.FT|PPutFile|
|00003640| 20 73 65 6e 64 73 20 61 | 20 62 75 66 66 65 72 20 | sends a| buffer |
|00003650| 66 72 6f 6d 20 74 68 65 | 20 6c 6f 63 61 6c 20 6d |from the| local m|
|00003660| 61 63 68 69 6e 65 20 74 | 6f 20 74 68 65 20 72 65 |achine t|o the re|
|00003670| 6d 6f 74 65 20 68 6f 73 | 74 2e 0d 09 54 68 65 20 |mote hos|t...The |
|00003680| 74 72 61 6e 73 66 65 72 | 20 69 73 20 63 6f 6d 70 |transfer| is comp|
|00003690| 6c 65 74 65 64 20 69 6e | 20 74 65 78 74 20 6d 6f |leted in| text mo|
|000036a0| 64 65 2e 0d 2a 2f 0d 0d | 4f 53 45 72 72 20 46 54 |de..*/..|OSErr FT|
|000036b0| 50 50 75 74 46 69 6c 65 | 28 75 6e 73 69 67 6e 65 |PPutFile|(unsigne|
|000036c0| 64 20 6c 6f 6e 67 20 63 | 6f 6e 6e 49 44 2c 63 68 |d long c|onnID,ch|
|000036d0| 61 72 20 2a 66 69 6c 65 | 4e 61 6d 65 2c 63 68 61 |ar *file|Name,cha|
|000036e0| 72 20 2a 64 61 74 61 2c | 6c 6f 6e 67 20 73 69 7a |r *data,|long siz|
|000036f0| 65 29 0d 7b 0d 09 4f 53 | 45 72 72 20 65 72 72 20 |e).{..OS|Err err |
|00003700| 3d 20 6e 6f 45 72 72 3b | 0d 09 75 6e 73 69 67 6e |= noErr;|..unsign|
|00003710| 65 64 20 6c 6f 6e 67 20 | 64 61 74 61 43 6f 6e 6e |ed long |dataConn|
|00003720| 49 44 3b 0d 09 50 74 72 | 20 72 65 73 70 42 75 66 |ID;..Ptr| respBuf|
|00003730| 66 3b 0d 09 75 6e 73 69 | 67 6e 65 64 20 73 68 6f |f;..unsi|gned sho|
|00003740| 72 74 20 72 65 73 70 4c | 65 6e 3b 0d 09 74 63 70 |rt respL|en;..tcp|
|00003750| 5f 70 6f 72 74 20 64 61 | 74 61 50 6f 72 74 3b 0d |_port da|taPort;.|
|00003760| 09 63 68 61 72 20 2a 67 | 65 74 43 6f 6d 6d 61 6e |.char *g|etComman|
|00003770| 64 3b 0d 09 75 6e 73 69 | 67 6e 65 64 20 73 68 6f |d;..unsi|gned sho|
|00003780| 72 74 20 64 61 74 61 4c | 65 6e 20 3d 20 63 44 61 |rt dataL|en = cDa|
|00003790| 74 61 4c 65 6e 3b 0d 09 | 54 43 50 69 6f 70 62 20 |taLen;..|TCPiopb |
|000037a0| 2a 70 42 6c 6f 63 6b 3b | 0d 09 0d 09 47 69 76 65 |*pBlock;|....Give|
|000037b0| 54 69 6d 65 28 63 53 6c | 65 65 70 54 69 6d 65 29 |Time(cSl|eepTime)|
|000037c0| 3b 0d 09 0d 09 46 54 50 | 54 65 78 74 4d 6f 64 65 |;....FTP|TextMode|
|000037d0| 28 63 6f 6e 6e 49 44 29 | 3b 0d 09 09 0d 09 67 65 |(connID)|;.....ge|
|000037e0| 74 43 6f 6d 6d 61 6e 64 | 20 3d 20 4d 79 4e 65 77 |tCommand| = MyNew|
|000037f0| 50 74 72 28 32 35 36 29 | 3b 0d 09 69 66 20 28 4d |Ptr(256)|;..if (M|
|00003800| 79 4d 65 6d 45 72 72 28 | 29 20 21 3d 20 6e 6f 45 |yMemErr(|) != noE|
|00003810| 72 72 29 0d 09 09 72 65 | 74 75 72 6e 20 4d 79 4d |rr)...re|turn MyM|
|00003820| 65 6d 45 72 72 28 29 3b | 0d 09 09 0d 09 73 74 72 |emErr();|.....str|
|00003830| 63 70 79 28 67 65 74 43 | 6f 6d 6d 61 6e 64 2c 22 |cpy(getC|ommand,"|
|00003840| 53 54 4f 52 20 22 29 3b | 0d 09 73 74 72 63 61 74 |STOR ");|..strcat|
|00003850| 28 67 65 74 43 6f 6d 6d | 61 6e 64 2c 66 69 6c 65 |(getComm|and,file|
|00003860| 4e 61 6d 65 29 3b 0d 09 | 73 74 72 63 61 74 28 67 |Name);..|strcat(g|
|00003870| 65 74 43 6f 6d 6d 61 6e | 64 2c 43 52 4c 46 29 3b |etComman|d,CRLF);|
|00003880| 0d 09 0d 09 64 61 74 61 | 50 6f 72 74 20 3d 20 47 |....data|Port = G|
|00003890| 65 74 50 6f 72 74 4e 75 | 6d 28 29 3b 0d 09 53 74 |etPortNu|m();..St|
|000038a0| 61 74 75 73 57 69 6e 64 | 6f 77 28 22 4f 70 65 6e |atusWind|ow("Open|
|000038b0| 69 6e 67 20 44 61 74 61 | 20 43 6f 6e 6e 65 63 74 |ing Data| Connect|
|000038c0| 69 6f 6e 2e 2e 2e 22 2c | 2d 31 29 3b 0d 09 47 69 |ion...",|-1);..Gi|
|000038d0| 76 65 54 69 6d 65 28 30 | 29 3b 0d 09 4d 61 6b 65 |veTime(0|);..Make|
|000038e0| 44 61 74 61 53 74 72 65 | 61 6d 28 26 64 61 74 61 |DataStre|am(&data|
|000038f0| 43 6f 6e 6e 49 44 2c 64 | 61 74 61 50 6f 72 74 2c |ConnID,d|ataPort,|
|00003900| 26 70 42 6c 6f 63 6b 29 | 3b 0d 09 69 66 20 28 28 |&pBlock)|;..if ((|
|00003910| 65 72 72 20 3d 20 53 65 | 6e 64 50 6f 72 74 43 6f |err = Se|ndPortCo|
|00003920| 6d 6d 28 63 6f 6e 6e 49 | 44 2c 64 61 74 61 50 6f |mm(connI|D,dataPo|
|00003930| 72 74 29 29 20 3d 3d 20 | 6e 6f 45 72 72 29 20 7b |rt)) == |noErr) {|
|00003940| 0d 09 09 53 74 61 74 75 | 73 57 69 6e 64 6f 77 28 |...Statu|sWindow(|
|00003950| 22 52 65 71 75 65 73 74 | 69 6e 67 20 54 72 61 6e |"Request|ing Tran|
|00003960| 73 66 65 72 2e 2e 2e 22 | 2c 2d 31 29 3b 0d 09 09 |sfer..."|,-1);...|
|00003970| 47 69 76 65 54 69 6d 65 | 28 30 29 3b 0d 09 09 69 |GiveTime|(0);...i|
|00003980| 66 20 28 28 28 65 72 72 | 20 3d 20 53 65 6e 64 43 |f (((err| = SendC|
|00003990| 6f 6d 6d 61 6e 64 28 63 | 6f 6e 6e 49 44 2c 67 65 |ommand(c|onnID,ge|
|000039a0| 74 43 6f 6d 6d 61 6e 64 | 2c 26 72 65 73 70 42 75 |tCommand|,&respBu|
|000039b0| 66 66 2c 26 72 65 73 70 | 4c 65 6e 29 29 20 3d 3d |ff,&resp|Len)) ==|
|000039c0| 20 6e 6f 45 72 72 29 20 | 26 26 0d 09 09 09 28 28 | noErr) |&&....((|
|000039d0| 65 72 72 20 3d 20 28 73 | 74 72 6e 63 6d 70 28 28 |err = (s|trncmp((|
|000039e0| 63 68 61 72 20 2a 29 72 | 65 73 70 42 75 66 66 2c |char *)r|espBuff,|
|000039f0| 22 31 35 30 22 2c 33 29 | 3d 3d 30 29 20 3f 20 6e |"150",3)|==0) ? n|
|00003a00| 6f 45 72 72 20 3a 20 63 | 4e 6f 74 43 6f 6d 70 45 |oErr : c|NotCompE|
|00003a10| 72 72 29 20 3d 3d 20 6e | 6f 45 72 72 29 29 20 7b |rr) == n|oErr)) {|
|00003a20| 0d 09 09 09 09 53 74 61 | 74 75 73 57 69 6e 64 6f |.....Sta|tusWindo|
|00003a30| 77 28 22 53 65 6e 64 69 | 6e 67 20 44 61 74 61 2e |w("Sendi|ng Data.|
|00003a40| 2e 2e 22 2c 2d 31 29 3b | 0d 09 09 09 09 47 69 76 |..",-1);|.....Giv|
|00003a50| 65 54 69 6d 65 28 30 29 | 3b 0d 09 09 09 09 65 72 |eTime(0)|;.....er|
|00003a60| 72 20 3d 20 53 65 6e 64 | 46 69 6c 65 44 61 74 61 |r = Send|FileData|
|00003a70| 28 64 61 74 61 43 6f 6e | 6e 49 44 2c 66 69 6c 65 |(dataCon|nID,file|
|00003a80| 4e 61 6d 65 2c 64 61 74 | 61 2c 74 65 78 74 2c 73 |Name,dat|a,text,s|
|00003a90| 69 7a 65 2c 70 42 6c 6f | 63 6b 29 3b 0d 09 09 7d |ize,pBlo|ck);...}|
|00003aa0| 0d 09 09 4d 79 44 69 73 | 70 6f 73 50 74 72 28 72 |...MyDis|posPtr(r|
|00003ab0| 65 73 70 42 75 66 66 29 | 3b 0d 09 7d 0d 09 52 65 |espBuff)|;..}..Re|
|00003ac0| 6d 6f 76 65 44 61 74 61 | 53 74 72 65 61 6d 28 64 |moveData|Stream(d|
|00003ad0| 61 74 61 43 6f 6e 6e 49 | 44 29 3b 0d 09 4d 79 44 |ataConnI|D);..MyD|
|00003ae0| 69 73 70 6f 73 50 74 72 | 28 67 65 74 43 6f 6d 6d |isposPtr|(getComm|
|00003af0| 61 6e 64 29 3b 0d 09 53 | 65 74 43 75 72 73 6f 72 |and);..S|etCursor|
|00003b00| 28 26 51 44 41 52 52 4f | 57 29 3b 0d 09 72 65 74 |(&QDARRO|W);..ret|
|00003b10| 75 72 6e 20 65 72 72 3b | 0d 7d 0d 00 00 00 00 00 |urn err;|.}......|
|00003b20| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003b30| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003b40| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003b50| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003b60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003b70| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003b80| 00 00 01 00 00 00 02 dc | 00 00 01 dc 00 00 00 4a |........|.......J|
|00003b90| 79 74 65 09 09 74 69 6d | 65 6f 75 74 2c 0d 09 42 |yte..tim|eout,..B|
|00003ba0| 6f 6f 6c 65 61 6e 09 09 | 2a 75 72 67 65 6e 74 2c |oolean..|*urgent,|
|00003bb0| 08 66 74 70 6c 6f 77 2e | 63 00 02 00 00 00 50 61 |.ftplow.|c.....Pa|
|00003bc0| 72 74 53 49 54 78 00 00 | 00 00 00 00 00 00 00 01 |rtSITx..|........|
|00003bd0| 00 00 50 61 72 74 53 49 | 54 78 00 00 00 00 00 00 |..PartSI|Tx......|
|00003be0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003bf0| 00 00 a9 8d 49 77 00 00 | 00 00 00 00 03 26 4f 53 |....Iw..|.....&OS|
|00003c00| 45 72 72 20 43 61 6c 6c | 54 43 50 43 6c 6f 73 65 |Err Call|TCPClose|
|00003c10| 28 0d 09 53 74 72 65 61 | 6d 50 74 72 09 73 74 72 |(..Strea|mPtr.str|
|00003c20| 65 61 6d 50 74 72 2c 0d | 09 62 79 74 65 09 09 75 |eamPtr,.|.byte..u|
|00003c30| 6c 70 54 4f 2c 0d 09 62 | 79 74 65 09 09 75 6c 70 |lpTO,..b|yte..ulp|
|00003c40| 54 41 2c 0d 09 62 79 74 | 65 09 09 76 61 6c 69 64 |TA,..byt|e..valid|
|00003c50| 29 3b 0d 09 0d 4f 53 45 | 72 72 20 43 61 6c 6c 54 |);...OSE|rr CallT|
|00003c60| 43 50 41 62 6f 72 74 28 | 53 74 72 65 61 6d 50 74 |CPAbort(|StreamPt|
|00003c70| 72 20 73 74 72 65 61 6d | 50 74 72 29 3b 0d 09 0d |r stream|Ptr);...|
|00003c80| 00 00 00 48 00 09 4d 6f | 6e 61 63 6f 00 00 00 14 |...H..Mo|naco....|
|00003c90| 00 27 f0 20 00 0a 00 00 | 00 00 00 00 00 00 00 00 |.'. ....|........|
|00003ca0| 00 00 00 38 00 01 00 06 | 00 04 00 52 00 3a 01 cb |...8....|...R.:..|
|00003cb0| 02 5b 00 52 00 3a 01 cb | 02 5b a4 0a af 79 00 00 |.[.R.:..|.[...y..|
|00003cc0| 34 14 00 00 34 14 00 00 | 32 a1 01 00 00 00 01 6a |4...4...|2......j|
|00003cd0| 00 12 00 00 08 a8 00 00 | 08 b0 09 53 61 79 48 65 |........|...SayHe|
|00003ce0| 6c 6c 6f 00 00 00 0b 04 | 00 00 0b 0c 09 55 73 65 |llo.....|.....Use|
|00003cf0| 72 41 75 74 68 00 00 00 | 0f 4f 00 00 0f 5a 0b 53 |rAuth...|.O...Z.S|
|00003d00| 65 6e 64 43 6f 6d 6d 61 | 6e 64 00 00 12 f5 00 00 |endComma|nd......|
|00003d10| 13 03 0f 4d 61 6b 65 44 | 61 74 61 53 74 72 65 61 |...MakeD|ataStrea|
|00003d20| 6d 00 00 00 15 64 00 00 | 15 71 0d 47 65 74 44 69 |m....d..|.q.GetDi|
|00003d30| 72 65 63 74 44 61 74 61 | 00 00 1b b0 00 00 1b bc |rectData|........|
|00003d40| 0d 53 65 6e 64 46 69 6c | 65 44 61 74 61 00 00 00 |.SendFil|eData...|
|00003d50| 1f bb 00 00 1f cb 11 52 | 65 6d 6f 76 65 44 61 74 |.......R|emoveDat|
|00003d60| 61 53 74 72 65 61 6d 00 | 00 00 20 ac 00 00 20 b6 |aStream.|.. ... .|
|00003d70| 0b 47 65 74 50 6f 72 74 | 4e 75 6d 00 00 00 21 b8 |.GetPort|Num...!.|
|00003d80| 00 00 21 c4 0d 53 65 6e | 64 50 6f 72 74 43 6f 6d |..!..Sen|dPortCom|
|00003d90| 6d 00 00 00 24 5e 00 00 | 24 69 0b 46 54 50 54 65 |m...$^..|$i.FTPTe|
|00003da0| 78 74 4d 6f 64 65 00 00 | 26 04 00 00 26 0b 07 46 |xtMode..|&...&..F|
|00003db0| 69 78 43 52 4c 46 00 00 | 27 af 00 00 27 b6 07 41 |ixCRLF..|'...'..A|
|00003dc0| 64 64 43 52 4c 46 00 00 | 2a 3c 00 00 2a 43 07 46 |ddCRLF..|*<..*C.F|
|00003dd0| 54 50 49 6e 69 74 00 00 | 2b 1c 00 00 2b 25 09 46 |TPInit..|+...+%.F|
|00003de0| 54 50 46 69 6e 69 73 68 | 00 00 2b af 00 00 2b b9 |TPFinish|..+...+.|
|00003df0| 0b 46 54 50 43 6f 6e 6e | 65 63 74 00 00 00 2e 13 |.FTPConn|ect.....|
|00003e00| 00 00 2e 20 0d 46 54 50 | 44 69 73 63 6f 6e 6e 65 |... .FTP|Disconne|
|00003e10| 63 74 00 00 2f ee 00 00 | 2f f9 0b 46 54 50 56 69 |ct../...|/..FTPVi|
|00003e20| 65 77 46 69 6c 65 00 00 | 36 01 00 00 36 0b 0b 46 |ewFile..|6...6..F|
|00003e30| 54 50 50 75 74 46 69 6c | 65 00 00 00 00 1e 00 52 |TPPutFil|e......R|
|00003e40| 00 3a 01 cb 02 5b 00 52 | 00 3a 01 cb 02 5b 00 00 |.:...[.R|.:...[..|
|00003e50| 32 a1 00 00 00 00 00 00 | 00 00 00 00 00 00 01 00 |2.......|........|
|00003e60| 00 00 02 dc 00 00 01 dc | 00 00 00 4a 00 43 15 b0 |........|...J.C..|
|00003e70| 06 40 00 00 00 1c 00 4a | 00 00 4d 50 53 52 00 02 |.@.....J|..MPSR..|
|00003e80| 00 0a 03 ed ff ff 00 00 | 00 00 00 00 00 00 03 ef |........|........|
|00003e90| ff ff 00 00 00 4c 00 00 | 00 00 03 f0 ff ff 00 00 |.....L..|........|
|00003ea0| 01 ba 00 44 fb 88 00 00 | 00 00 00 00 00 00 00 00 |...D....|........|
|00003eb0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003ec0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003ed0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003ee0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00003ef0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+